NodeJS 文件系统监视在单个更改上触发两次

3zwtqj6y  于 2023-01-08  发布在  Node.js
关注(0)|答案(2)|浏览(212)

我刚刚开始使用NodeJS,这是我编写的第一个示例。

const fs = require('fs');
fs.watch('target.txt', () => {
    console.log('File target.txt just changed..');
});
console.log('Now watching target.txt for changes');

当我执行echo 'Hello..' >> target.txt时,我看到我的控制台日志发生了两次。
为什么会有这种奇怪的行为。
我正在使用节点v8.12.0

juzqafwq

juzqafwq1#

根据fs.watch(filename[, options][, listener])的节点文档:

    • 已知注意事项**:

fs.watch API在不同平台之间并非100%一致,在某些情况下不可用。递归选项仅在macOSWindows上受支持。
此外,Windows具有已知设计issue,其中 * 两个回调被触发以写入文件 *。这在类似的post here.中得到验证
fs.watch * 只是节点部分上的一个错误API,导致不一致的行为 *。
希望能有所帮助!

d7v8vwbk

d7v8vwbk2#

添加一个小的时间限制将使fs.watch()不会被处理两次,它仍然会被触发两次,但处理只在指定的时间间隔内运行一次。

const fs = require('fs');

// handle once within a specified interval (milliseconds)
const interval = 100;
let time = new Date().getTime();

fs.watch('target.txt', () => {
  let now = new Date().getTime();
  if (now - time > interval) {
    time = now;

    // handle the change
    console.log('File target.txt just changed..');
  }
});
console.log('Now watching target.txt for changes');

相关问题