我正在使用 NPM 包 chokidar 來監視新檔案。每當創建新檔案或更新現有檔案時,我都想執行一個函式。問題是每當創建新檔案時,chokidar NPM 包都會觸發 2 個事件,即add和change. 這使得函式執行 2 次。
我嘗試以兩種方式添加偵聽器。
方法一
watcher.on('add', handleFileRequest);
watcher.on('change', handleFileRequest);
方法二
watcher.on('all', (event, path) => {
console.log(`event: ${event}`);
if (event == 'change' || event == 'add') {
handleFileRequest(path);
}
});
上述兩個代碼片段都呼叫了 2 次 handleFileRequest 方法。
uj5u.com熱心網友回復:
我使用了一個全域陣列 ( 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);
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/513571.html
