在forEach迭代数组之后发送响应(使用回调?)

时间:2016-09-05 04:16:47

标签: javascript

我多次保存到数据库,然后我想res.send(people.json)。我试过“然后”,我试着“打电话”。我不确定我是否正确行事......因为它一直在破坏应用程序。在forEach完全迭代之后,如何让事情发生?

people.forEach(saveRequest).call(res.json(people)); //   TypeError: Cannot read property 'call' of undefined

people.forEach(saveRequest).then(res.json(people)); //   TypeError: Cannot read property 'then' of undefined

2 个答案:

答案 0 :(得分:3)

据推测,我们正在谈论Array.prototype.forEach()。如果是,那么以下内容将在res.json(people)完成后执行people.forEach(saveRequest);

people.forEach(saveRequest);
res.json(people);

Array.prototype.forEach()是同步的,但函数saveRequest可能同步也可能不同步。根据您在问题中提供的信息,我们无法知道。如果saveRequest是同步的,那么res.json(people)将在saveRequest数组中的每个值执行people后执行。如果saveRequest是异步的,那么将对people数组中的每个值启动异步操作,但所有操作都不可能在时间res.json(people)之前完成。如果saveRequest是异步的,那么问题中提供的信息不足以让我们建议在所有操作完成后执行res.json(people)的方法。

答案 1 :(得分:1)

假设saveRequest是异步的,并返回一个人履行的承诺,请使用Promise.all

Promise.all(people.map(saveRequest))
  .then(people => res.json(people))