Javascript Node Express 4在多次API调用后发送响应
我正在使用Express4构建一个NodeJS服务器。我使用这个服务器作为前端angular应用程序和第三方API之间的中间人。 我创建了前端应用程序请求的特定路径,我希望在该路径上多次调用API,合并所有响应,然后发送结果响应。 我不知道该怎么做,因为我需要等到每个API调用完成。 示例代码:Javascript Node Express 4在多次API调用后发送响应,javascript,node.js,express,superagent,Javascript,Node.js,Express,Superagent,我正在使用Express4构建一个NodeJS服务器。我使用这个服务器作为前端angular应用程序和第三方API之间的中间人。 我创建了前端应用程序请求的特定路径,我希望在该路径上多次调用API,合并所有响应,然后发送结果响应。 我不知道该怎么做,因为我需要等到每个API调用完成。 示例代码: app.post('/SomePath', function(req, res) { var merged = []; for (var i in req.body.object) {
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响应后,如何发送响应
谢谢。签出,它使用Async
模块同时发出几个请求,然后在所有请求完成后调用回调
根据@sean的回答,我相信每一个都比地图更合适
然后它会像这样:
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);
});
首先,不能在循环中使用异步方法,这是不正确的
你可以用
问题在于APIObject.sendRequest
是异步的,因此for
循环在实际请求完成之前结束?这里有很多问题,这就是其中之一。是否有其他方法可以做到这一点?不完全正确,因为map
用于更改数组的值每种
都会更合适。@Neta我不知道你的意思是什么?为什么您认为map用于更改数组的值?map用于将数据从一个类别转换为另一个类别,map不应更改数组的原始值。从:通过迭代器函数映射arr中的每个值,生成一个新的值数组。
它遍历原始数组中的每个值,传递到迭代器,并更改所述值。最后返回新数组。参数无效。我们需要知道req.body.object
的值是多少。让他试试这两种代码,看看它们是否有效。哇,伙计,这简直太疯狂了,它立刻就起作用了:D!不错。Thnx。您只是在},函数(err){附近有一个小语法错误,APIObject有一个打开的括号,您必须关闭它!
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);
});
});