我正在编写一个Node.js服务器,该服务器监视一个充满空文件的目录以进行更改。当文件更改时,它会通知客户端,然后清空该文件。手表代码是:
fs.watch("./files/", function(event, targetfile){
console.log(targetfile, 'is', event)
fs.readFile("./files/"+targetfile, 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
if (data=="") return; //This should keep it from happening
//Updates the client here
fs.truncate("./files/"+targetfile, 0);
});
});
更改事件发生两次,因此客户端会更新两次。这不可能发生。它就像watch函数同时被调用两次一样,并且都可以在执行truncate命令之前执行。我如何防止这种情况发生?我不能,比如说,阻止一个线程,因为我需要它来实时响应其他文件。
感谢您的帮助。我是Node.js的新手,但到目前为止我很喜欢它。
答案 0 :(得分:2)
您可以使用下划线实用程序方法Once来阻止函数执行多次。您必须使您的代码看起来像这样:
var func = _.once(function(targetfile){
fs.readFile("./files/"+targetfile, 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
if (data=="") return; //This should keep it from happening
//Updates the client here
fs.truncate("./files/"+targetfile, 0);
});
});
fs.watch("./files/", function(event, targetfile){
console.log(targetfile, 'is', event);
func(targetfile);
});