限制使用nodejs观看的文件数

时间:2016-07-27 15:20:05

标签: javascript node.js

我有一个用nodejschokidar编写的脚本,在添加文件时我会收听文件夹。

添加文件时,启动具有多个循环的函数。

有时系统会同时添加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);
})

1 个答案:

答案 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 答案,例如使用流和背压