首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js中的文件监视

Node.js中的文件监视
EN

Stack Overflow用户
提问于 2013-12-22 22:33:54
回答 1查看 1.8K关注 0票数 3

我正在编写一个Node.js服务器,它监视满是空文件的目录以进行更改。当文件更改时,它会通知客户端,然后清空该文件。手表代码是:

代码语言:javascript
复制
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的新手,但到目前为止我很喜欢它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-22 22:48:57

您可以使用下划线实用程序方法一次,它使函数不能多次执行。您必须使代码看起来像这样:

代码语言:javascript
复制
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);
});

如果希望它执行不止一次,但希望筛选出重复的事件,则可以使用像节流阀脱去这样的函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20734765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档