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

Sending a response (using a callback?) after a forEach iterates over an array

本文关键字:回调 响应 迭代 forEach 数组      更新时间:2023-09-26

我多次保存到数据库,然后我想res.send(people.json)。我试了"then"answers"call"。我不确定我这样做对不对……因为它总是破坏应用程序。我如何在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

假设我们谈论的是Array.prototype.forEach()。如果是这样,则在people.forEach(saveRequest);完成后执行res.json(people):

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

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

假设saveRequest是异步的,并且返回一个由一个人完成的承诺,使用Promise.all:

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