周围有很多控制流库。我在以前的项目中使用过 Q,对此我没有任何抱怨,但是我可能会考虑在我的下一个项目中使用 caolan 的异步库。
https://github.com/caolan/async
根据您上面的描述,您可能想看看使用并行函数
https://github.com/caolan/async#parallel
您描述的问题可以很容易地转移到文档中的并行示例
编辑:我错过了关于 API 调用依赖的一点。每当您需要沿链传递值并控制您需要使用瀑布方法的顺序时(请参阅 qiao 的答案)。如果存在调用独立的情况,您将使用并行方法。下面是并行方法的一个示例
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