salep
salep

Reputation: 1380

Using Express.js's res.send() with async.each

async1.each(arr, function(arrayMember) {    
  orders.where('name', arrayMember).fetch({withRelated: ['allOrders']}).
  then(function(dd2, callback) {
    dd2 = dd2.toJSON();
    var sendMemberOrder = {};
    sendMemberOrder.name = dd2.name;
    sendMemberOrder.lastOrder = dd2.allOrders.length;
    res.send(sendMemberOrder);
  });
}, function(err) {
  if (err) {
    console.log("err");
  }
});

I'm trying to use Express's res.send() feature but given that I'm using async.each, I'm getting

headers already sent

error.

How can I pass the result of each iteration as an array when a request is being made?

Upvotes: 0

Views: 850

Answers (1)

Tamas Hegedus
Tamas Hegedus

Reputation: 29936

Since you already use promises here, I would like to doscourage you from using async.js here. Your code is broken anyway as it does not call callback at all, and the callback parameter is declared on the wrong function. Instead you could try this:

app.get(your_route, function(req, res, next) {
  // obtain arr
  Promise.all(arr.map(function(arrayMember) {
    return orders.where('name', arrayMember)
    .fetch({withRelated: ['allOrders']})
    .then(function(dd2) {
      dd2 = dd2.toJSON();
      return {
        name: dd2.name,
        lastOrder: dd2.allOrders.length
      };
    });
  })).then(function(resultData) {
    res.send(resultData);
  }).catch(function(err) {
    console.log(err);
    next(err);
  });
});

Upvotes: 1

Related Questions