在forEach循环中调用服务并等待其完成,然后继续操作

时间:2019-08-19 17:15:45

标签: javascript node.js

我想在执行下一个代码块之前获取嵌套在forEach循环中的服务调用的结果

我尝试过使用普通的for循环,该方法可以工作...但是ESLINT抱怨着..那么理想的解决方案是什么?

const people = []

const fetchPeople = async () => {
  peopleIds.forEach(personId => {
    people.push(restApi.getPersonById(personId))
  })
}

await fetchPeople()
logger.error(`people should be populated : ${JSON.stringify(people)}`)

我希望人们在forEach的末尾被填充,因此我可以在下一个函数中使用结果。

实际上,没有人居住

1 个答案:

答案 0 :(得分:4)

最简单的方法是使用Promise.all()和array.map()

const people = await Promise.all(peopleIds.map(restApi.getPersonById));
logger.error(`people should be populated : ${JSON.stringify(people)}`)

Array.map()将为每个id创建一个承诺,Promise.all将等待所有id并输出其异步返回值的数组。