周围有很多控制流库。我在之前的项目中使用过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对于提出一般问题没有规定。我正在寻找最好的工具,因为我正在学习如何正确解决问题的方法。如果您有答案,请将其作为一个答案 - 我很乐意详细了解您提供的每种解决方案,并且您可能会获得一些积分。关闭一个问题,因为你已经知道它的答案击败了整个网站的目的:) –