Javascript Node.js中的文件监视
我正在编写一个Node.js服务器,它监视一个满是空文件的目录中的更改。当文件更改时,它会通知客户端,然后清空文件。值班代码为:Javascript Node.js中的文件监视,javascript,node.js,inotify,Javascript,Node.js,Inotify,我正在编写一个Node.js服务器,它监视一个满是空文件的目录中的更改。当文件更改时,它会通知客户端,然后清空文件。值班代码为: fs.watch("./files/", function(event, targetfile){ console.log(targetfile, 'is', event) fs.readFile("./files/"+targetfile, 'utf8', function (err,data) { i
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,但到目前为止我很喜欢它。您可以使用下划线实用程序方法来防止函数执行多次。您必须使代码如下所示:
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);
});
如果希望它执行多次,但要过滤掉重复事件,可以使用或之类的函数。第二个事件是通过截断文件触发的…这不是因为它用数据更新客户端两次。Throttle看起来像我想要的。。。我会试试看,如果行得通,我会接受答案。我错了
debounce
是我想要的。但它奏效了。非常感谢。