我正在使用Express4构建NodeJS服务器。我使用此服务器作为前端角度应用程序和第三方API之间的中间人。 我创建了一个我的前端应用程序请求的特定路径,我希望在该路径上多次调用API并合并所有响应,然后发送生成的响应。 我不知道该怎么做,因为我需要等到每个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);
});
正如您所看到的,我在循环中调用API取决于我在请求中收到的APIObject.sendRequest的数量。
如何在完成所有操作后发送响应并合并API响应?
谢谢。
答案 0 :(得分:1)
签出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);
});
答案 1 :(得分:0)
首先,你不能在循环中执行异步方法,这是不正确的。
您可以使用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);
});
});