NodeJS 文件系统 监视抛出事件两次或更多次
NodeJS Filesystem Watch throwing event twice or more often
我正在使用以下命令在 Ubuntu 上查看我的 NodeJS 服务器的配置文件:
for( var index in cfgFiles ) {
fs.watch(cfgFiles[index], function(event, fileName) {
logger.info("======> EVENT: " + event);
updateConfigData(fileName);
});
}
因此,每当我保存配置文件时,同一文件名的处理程序函数至少接收两次"change"事件,从而导致 updateConfigData() 多次执行。在使用 C++/iNotify 查看配置文件时,我遇到了相同的行为。
有没有人知道导致这种行为的原因?
简短回答:它不是 Node,文件确实更改了两次。
长答案
我有一个非常相似的方法,用于我的开发设置。我的管理器进程会监视所有 js 源文件(如果它是开发计算机),并在群集上重新启动子文件。
我没有注意这一点,因为它只是开发设置;但是在我读了你的问题后,我看了一下,意识到我也有同样的行为。
我在本地计算机上编辑文件,每当我保存时,我的编辑器都会通过 sftp 更新它们。每次保存时,都会触发文件上的更改事件两次。
我已经检查了侦听器('change')中由fs.watch调用返回的FSWatcher对象;但它只显示一次我的事件处理程序。
然后我做了我应该首先做的测试:服务器上的"触摸文件.js",它只触发了一次。所以,对我来说,它不是 Node;但是文件真的被更改了两次。当打开文件进行写入(而不是追加)时,它可能会触发更改,因为它会清空内容。然后,当写入新内容时,它会再次触发该事件。
这不会给我带来任何问题;但是如果你想防止它,你可以通过保留每个文件的调用号码来在你的事件处理程序函数中做一个奇偶控件,并且只对偶数索引调用执行任何操作。
请参阅我对类似问题的回答,该问题是由您的编辑器在保存时对文件进行多次编辑引起的。
相关文章:
- g++的分段错误(在NaN上使用to_string两次时)
- 蛇在C++不会连续转两次
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 我应该如何去缓解两次出现的cin?
- Realloc 两次无法在 Visual Studio 上运行
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++析构函数调用两次,堆栈分配的复合对象
- 为什么参数在构造 std::thread 时移动两次
- Qt插槽调用了两次
- 做 std::用相同的unique_ptr移动两次
- C++两次定义相同的函数会导致错误
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 对于优化级别为 0 的 std::vector,析构函数被调用两次
- 使用柯南打包时如何避免列出两次依赖?
- 为什么要执行两次位移((x >> 4)<< 4)?
- 对结构向量进行两次排序
- 如果我使用同一个密钥推送用户数据两次,会发生什么
- NodeJS 文件系统 监视抛出事件两次或更多次