多个异步写入节点中的同一文件

时间:2014-10-22 21:21:51

标签: node.js asynchronous

我正在使用fs.writeFile(...)根据用户输入编写对文件的修改。我最近遇到了一个错误,其中有两个写入请求有效导致文件被截断。

每个写操作必须按接收顺序完成。但是我不希望用户在继续执行下一个任务之前必须等待写入完成。

对异步写入进行排队的规范方法或流行模块是什么,以便在写入发生时不阻止用户执行其他工作,并保证不会发生冲突。

此外,如果可能,我希望读取同一文件。

我最初的想法是写一个临时文件然后复制,但这看起来效率不高。

1 个答案:

答案 0 :(得分:5)

使用async模块中的async.queue创建并发为1的任务运行器(一次只能运行一个操作)。发生新编辑时,将其添加到队列中。你的逻辑如下:

  1. 将任务添加到队列。
  2. 当任务运行时读取现有文件。
  3. 执行您的写逻辑。
  4. 调用异步队列回调,以便进行下一次排队写入。