构建我的第一个“严肃的”Node.js项目(使用Express)。
我需要使用多个REST API调用,收集所有结果,按摩它们并将完整的JSON返回给客户端(HTML5 + AJAX)。
我确信/希望有一个简单的模式,解决方案或模块,我只是没有谷歌正确:) 我还希望得到关于在何处进行此类操作的意见(在“路线”下?单独的文件等等)
谢谢你的时间!
答案 0 :(得分:8)
async模块适用于此类工作。具体来说,您可以使用async.waterfall功能。
示例:
async.waterfall([
function(callback){
callback(null, 'one', 'two');
},
function(arg1, arg2, callback){
callback(null, 'three');
},
function(arg1, callback){
// arg1 now equals 'three'
callback(null, 'done');
}
], function (err, result) {
// result now equals 'done'
});
编辑,如果您在作业之间有一些非常重要的依赖关系,那么您可以使用async.auto。它将根据需要确定运行函数的最佳顺序。
答案 1 :(得分:2)
周围有很多控制流程库。我在以前的项目中使用了Q,我没有抱怨,但是我可能会考虑使用caolan的async库来完成我的下一个项目。
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);
}
}
);
这样做可以并行处理所有请求,并在完成所有操作后为您提供回调。这是您按摩数据的地方。
控制流程库列表: