我正在使用NPM包Chokidar来查看新文件.我想在创建新文件或更新现有文件时执行函数. 问题是,每当创建新文件时,Chokidar NPM包都会触发addchange这两个事件.这使得该函数执行2次.

我试着用两种方式添加听众.

Method 1

watcher.on('add', handleFileRequest);
watcher.on('change', handleFileRequest);

Method 2

watcher.on('all', (event, path) => {
        console.log(`event: ${event}`);
        if (event == 'change' || event == 'add') {
            handleFileRequest(path);
        }
    });

上面的两个代码片段都调用handleFileRequest方法两次.

推荐答案

我使用全局数组(processing_requests)来跟踪handleFileRequest对不同文件的运行情况.然后,在调用handleFileRequest之前,我判断了该函数是否已经在为同一文件运行.如果它已经在运行,那么我只需跳过handleFileRequest的执行.

watcher.on('all', (event, path) => {
        if ((event == 'change' || event == 'add') && !processing_requests.includes(path)) {
            processing_requests.push(path);
            handleFileRequest(path);
            setTimeout(function() {
                processing_requests = processing_requests.filter(x => x != path);
            }, 500);
        }
    });

Node.js相关问答推荐

当建议在第二代上运行云功能时,现在是否有新的Firestore AdminClient可供使用?

无法使用Sequelize连接AWS RDS

mongoose 模型填充问题

为什么这个verifyToken函数从未被调用过?

如何在 JavaScript 中显示多维数组中使用的一维数组的变量名?

Cloudflare 522 错误 - javascript 客户端连接到 node 服务器

Angular Build 生产返回致命的 javascript 无效大小错误

module.exports=require('other') 和临时变量有什么区别?

如何使用 Jest 模拟异步函数的延迟时间

如何调用同名的两个函数?

在 NodeJS/ESP32 中通过 WebSocket 发送二进制数据 - 如何识别二进制和文本消息

通过 npm 导入 Sass

`npm install` 以Killed结尾

提供静态文件到底是什么意思?

如何在 Node.js 中逐字节读取二进制文件

我们如何或可以通过 npm 和 Meteor 使用 node 模块?

使用 nvm-windows 时更新 npm

从 zip 文件在 AWS 中创建 lambda 函数

Node.js:如何附加到正在运行的进程并使用控制台调试服务器?

如何调试 Gulp 任务?