我正在编写一个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的新手,但到目前为止我很喜欢它。
发布于 2013-12-22 22:48:57
您可以使用下划线实用程序方法一次,它使函数不能多次执行。您必须使代码看起来像这样:
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);
});https://stackoverflow.com/questions/20734765
复制相似问题