Search code examples
javascriptnode.jsexpresssuperagent

Node Express 4 send a response after multiple API calls


I am building a NodeJS server using Express4. I use this server as a middleman between frontend angular app and 3rd party API. I created a certain path that my frontend app requests and I wish on that path to call the API multiple times and merge all of the responses and then send the resulting response. I am not sure how to do this as I need to wait until each API call is finished. Example code:

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

As you can see Im calling the API within a loop depending on how many APIObject.sendRequest I received within request.

How can I send a response after all is done and the API responses are merged?

Thank you.


Solution

  • Check out this answer, it uses the Async module to make a few requests at the same time and then invokes a callback when they are all finished.

    As per @sean's answer, I believe each would fit better than map.

    It would then look something like this:

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