NODE fs.readFile,JSON.parse和fs.writeFile

时间:2014-01-30 02:49:24

标签: node.js

我正在Node中编写一个应用程序,并且已经遇到了一个罕见但有害的事件。

所以我有一个schedule.txt,当用户进行更改时我会写入,然后每秒读取一次,然后解析它以便在整个程序中使用。

很少发生的事情是当用户写入文件(异步)时,应用程序(基于计时器)读取同一文件并尝试解析它并失败。

我从设计角度知道也许这肯定会发生......但我想知道我现在能做的快速修复。使用writeFileSync会帮助我的情况吗? (让它更“原子”?)我只想确保应用程序不读取文件,而另一个进程仍在写入文件。

TIA!

尼科

1 个答案:

答案 0 :(得分:1)

好像你想要序列化你的读/写。如果是我,我可能会尝试使用“管理器”对象来封装序列化,您可以使用它:

var fileManager = require('./file-manager');

// somewhere in the program
fileManager.scheduleWrite(data, function(err){
  // now the write is done
});

// somewhere else in the program
fileManager.scheduleRead(function(err, data){
  // `data` contains the data
});

然后使用Q或类似的承诺lib实现它,例如:

// in file-manager.js
var wait = Q();
module.exports = {
  scheduleWrite: function(data, cb){
    wait = wait.then(function(){
      // write data and call cb()
    });
  },
  scheduleRead: function(){
    wait = wait.then(function(){
      // read data and call cb(data)
    });
  }
};

wait var将“叠加”到一个序列化的任务链中,下一个任务将在前一个完成之前不会启动。