Node Express 4在多个API调用后发送响应
我正在使用Express4构建NodeJS服务器。我使用这个服务器作为前端角应用和第三方API之间的中间人。 我创建了我的前端应用程序请求的某个路径,我希望在该路径上多次调用API并合并所有响应,然后发送响应结果。 我不知道如何做到这一点,因为我需要等到每个API调用完成。 示例代码:Node Express 4在多个API调用后发送响应
app.post('/SomePath', function(req, res) {
var merged = [];
for (var i in req.body.object) {
// APIObject.sendRequest uses superagent module to handle requests and responses
APIObject.sendRequest(req.body.object[i], function(err, result) {
merged.push(result);
});
}
// After all is done send result
res.send(merged);
});
正如你可以看到林取决于我内要求有多少APIObject.sendRequest收到的呼叫电话在一个循环中的API。
如何在完成所有操作并将API响应合并后发送响应?
谢谢。
检出this answer,它使用Async
模块同时发出几个请求,然后在完成所有请求时调用回调。
根据@ sean的回答,我相信each
会比map
更合适。
然后,它将是这个样子:
所有的var async = require('async');
async.each(req.body.object, function(item, callback) {
APIObject.sendRequest(item, function(err, result)) {
if (err)
callback(err);
else
{
merged.push(result);
callback();
}
}
}, function(err) {
if (err)
res.sendStatus(500); //Example
else
res.send(merged);
});
哇这个人真是疯了,它马上就像是一样:D!好一个。日Thnx。你只是有一点附近的语法错误},function(err){,APIObject有一个你必须关闭的支架。 thnx再次这个异步模块岩! – StrikoMirko
很高兴听到!语法错误已修复。 – Neta
首先,你不能在一个循环做一个异步方法,这是不正确的。可以使用the async
module's map function。
app.post('/SomePath', function(req, res) {
async.map(req.body.object, APIObject.sendRequest, function(err, result) {
if(err) {
res.status(500).send('Something broke!');
return;
}
res.send(result);
});
});
问题是'APIObject.sendRequest'是异步的,所以'for'循环在实际请求完成之前结束? – Neta
这里有很多问题,这就是其中之一。有没有其他方法可以做到这一点? – StrikoMirko