异步编程 互动版

queue(worker, concurrency);


queue相当于一个加强版的parallel,主要是限制了worker数量,不再一次性全部执行。当worker数量不够用时,新加入的任务将会排队等候,直到有新的worker可用。

它有多个点可供回调,如无等候任务时(empty)、全部执行完时(drain)等。

示例:定义一个queue,其worker数量为2:

var q = async.queue(function(task, callback) {
    console.log('worker is processing task: ', task.name);
    callback();
}, 2);
q.push({name: 'foo'}, function (err) {
    console.log('finished processing foo');
});
q.push({name: 'bar'}, function (err) {
    console.log('finished processing bar');
});

当最后一个任务交给worker执行时,会调用empty函数:

q.empty = function() {
    console.log('no more tasks wating');
}

参照示例,当q全部执行完时输出'work is over.';