我多次保存到数据库,然后我想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
答案 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))