我正在Node中编写一个应用程序,并且已经遇到了一个罕见但有害的事件。
所以我有一个schedule.txt,当用户进行更改时我会写入,然后每秒读取一次,然后解析它以便在整个程序中使用。
很少发生的事情是当用户写入文件(异步)时,应用程序(基于计时器)读取同一文件并尝试解析它并失败。
我从设计角度知道也许这肯定会发生......但我想知道我现在能做的快速修复。使用writeFileSync会帮助我的情况吗? (让它更“原子”?)我只想确保应用程序不读取文件,而另一个进程仍在写入文件。
TIA!
尼科
答案 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将“叠加”到一个序列化的任务链中,下一个任务将在前一个完成之前不会启动。