2013-04-22 75 views
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); 
    } 
} 

有沒有另一種方法呢?

回答

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); 
相關問題