Node Express 4 在多次 API 调用后发送响应

Node Express 4 send a response after multiple API calls

我正在使用 Express4 构建一个 NodeJS 服务器。我将此服务器用作前端 angular 应用程序和第三方 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 个回复后如何发送回复?

谢谢。

查看 this answer,它使用 Async 模块同时发出几个请求,然后在它们全部完成时调用回调。

根据@sean 的回答,我相信 eachmap 更适合。

它看起来像这样:

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);
});

首先,你不能在循环中执行异步方法,那是不正确的。

您可以使用 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);
  });
});