【问题标题】:Using Express.js's res.send() with async.each将 Express.js 的 res.send() 与 async.each 一起使用
【发布时间】:2016-12-09 17:25:38
【问题描述】:
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");
  }
});

我正在尝试使用 Express 的 res.send() 功能,但鉴于我使用的是 async.each,我得到了

标头已发送

错误。

在发出请求时,如何将每次迭代的结果作为数组传递?

【问题讨论】:

  • 能否向我们展示整个中间件,包括res.send 部分?
  • 我编辑了我的问题。如果我尝试这种方式,我会得到一个错误。如何安排我的异步功能,以便在完成后通过 res.send() 将所有内容发送到浏览器?
  • 您希望它是 sendMemberOrders 的 JSON 数组吗?您是否需要流式解决方案,或者在发送数据之前将数据保存在内存中就足够了?
  • 这是一小块数据,仅包含 200 个单词。

标签: express asynchronous async.js


【解决方案1】:

由于您已经在这里使用了 Promise,我想鼓励您不要在这里使用 async.js。无论如何,您的代码都已损坏,因为它根本不调用回调,并且在错误的函数上声明了回调参数。相反,你可以试试这个:

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

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2012-07-10
    相关资源
    最近更新 更多