1

我的问题是:“如何在所有异步函数完成工作后运行回调”

这里有一个例子:

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);
    }
}

还有另一种方法吗?

4

2 回答 2

4

你可以使用异步库,https://github.com/caolan/async

async.parallel([
    function(){ ... },
    function(){ ... }
], callback);
于 2013-04-22T10:52:27.617 回答
2

使用计数器:

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);
于 2013-04-22T11:27:11.200 回答