周圍有很多控制流庫。我在之前的項目中使用過Q,我沒有任何抱怨,但是我可能會考慮使用caolan的異步庫作爲我的下一個項目。
https://github.com/caolan/async
從您上面所描述的東西,你可能想看看使用並行功能
https://github.com/caolan/async#parallel
您所描述的問題可以很容易地轉移到並行在文檔中的示例
編輯:我錯過了關於API調用依賴的位。無論何時您需要沿着鏈傳遞值並控制您需要使用瀑布方法的順序(請參閱喬的答案)。如果存在呼叫是獨立的情況,您可以使用並行方法。並行方法的一個例子是下面
async.parallel({
google: function(callback){
http.get("http://www.google.com", function(res){
console.log("google done");
callback(null, res.statusCode);
})
},
yahoo: function(callback){
http.get("http://www.yahoo.com", function(res){
console.log("yahoo done");
callback(null, res.statusCode);
})
}
},
function(err, results) {
if(!err){
console.log("all done");
console.log(results.google);
console.log(results.yahoo);
}else{
console.log(err);
}
}
);
這樣做是讓所有並行的請求,並給你一個回調時,他們都做。這是你將按摩你的數據的地方。
列表的控制流庫:
https://github.com/joyent/node/wiki/Modules#wiki-async-flow
這只是一個普通的異步編程問題。我認爲它不太適合stackoverflow,因爲有許多不同的方式來解決它(纖維,異步庫,事件處理)。你應該只使用非常有名的但非常有用的Q庫來使用promise。這是一個有見解的答案,所以我將它作爲評論留下。我希望現在關閉此問題。 –
@AndyRay這是一件好事,你還不能關閉問題。 – Tomalak
@AndyRay對於提出一般問題沒有規定。我正在尋找最好的工具,因爲我正在學習如何正確解決問題的方法。如果您有答案,請將其作爲一個答案 - 我很樂意詳細瞭解您提供的每種解決方案,並且您可能會獲得一些積分。關閉一個問題,因爲你已經知道它的答案擊敗了整個網站的目的:) –