我有一个用nodejs
和chokidar
编写的脚本,在添加文件时我会收听文件夹。
添加文件时,启动具有多个循环的函数。
有时系统会同时添加100个或更多文件,因此事件add
被调用100次,服务器可能崩溃。
有没有办法限制观看的文件,其他人会等到观看的文件关闭?
例如,我决定我不能同时观看10个以上的文件,其他文件要等到前10个文件完成它们。
有可能吗?
这是我的剧本:
var chokidar = require('chokidar');
var sys = require('sys')
var exec = require('child_process').exec;
var folder = process.argv[2];
var watcher = chokidar.watch('tmp/xml/' + folder + '/', {ignored: /^\./, persistent: true});
watcher
.on('add', function(path) {
var filenameArr = path.split('/');
filename = folder + '/' + filenameArr[filenameArr.length - 1];
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec('bin/cake manager readXmlAndSave ' + filename, puts);
})
答案 0 :(得分:1)
const chokidar = require('chokidar');
const async = require("async");
[...]
let taskQueue;
const watcher = chokidar.watch('myPath');
watcher
.on('add', function(path) {
taskQueue.push({path});
})
// handle files 10 per 10 to avoid to exhaust critical resources
taskQueue = async.queue(async function(task) {
await myAsyncHandler(task.path);
}, 10);
taskQueue.error(function(err, task) {
handleError(err, task);
});
对于我的文化,我很想看到一个纯粹的 vanillaJS 答案,例如使用流和背压