如何在所有并行功能运行完成他们的工作时运行回调?
问题描述:
我得到堆栈的问题: “如何运行的回调毕竟异步函数完成自己的工作”如何在所有并行功能运行完成他们的工作时运行回调?
下面的例子:
function doTasks(**callback**) {
doTask1(function() {
...
});
doTask2(function() {
...
});
}
我不想跑了一个又一个的任务。并行运行它们的想法,但我完全需要回调。 nodeJs是否具有内置功能?
现在我正在使用EventEmitter和计数器的组合。每次任务完成时,它都会运行一个事件。因为我知道已经运行了多少任务。我可以数它并发出回调。但一定要更灵活一些。这里是我现在使用的。
var EventEmitter = require("events").EventEmitter;
var MakeItHappen = module.exports = function (runAfterTimes, callback) {
this._aTimes = runAfterTimes || 1;
this._cTimes = 0;
this._eventEmmiter = new EventEmitter();
this._eventEmmiter.addListener("try", callback);
}
MakeItHappen.prototype.try = function() {
this._cTimes += 1;
if (this._aTimes === this._cTimes) {
this._cTimes = 0;
this._eventEmmiter.emit("try", arguments);
}
}
有没有另一种方法呢?
答
可以使用异步库,https://github.com/caolan/async
async.parallel([
function(){ ... },
function(){ ... }
], callback);
答
使用计数器:
var a = function (cb){
//Asynchronous stuff
cb();
};
var b = function (cb){
//Asynchronous stuff
cb();
};
var remaining = 2;
var finish = function(){
if (!--remaining){
//a and b finished...
}
};
a (finish);
b (finish);