异步函数不会在 nodejs 中等待内部等待

时间:2021-02-25 10:46:47

标签: node.js async-await promise

我正在实施功能每月收入。 简单来说,它会返回每月的总收入,并接受将产生收入、月和年的站数组参数。

问题 在这个函数内部,我有 getStationPortion,它将获取用户的收入部分。 所以我想让它像这样返回对象。

stationsPortion = {station1 : 30, station2 : 20}

按月收入

const stationPortions = await getStationPortions(stations)
console.log("portion map", stationPortions      //it will be shown very beginning with empty

getStationPortions

const getStationPortions = async (stations) => {
  let stationPortions = {}
  stations.map(async (value) => {
    const doc = await fdb.collection('Stations').doc(value).get()
    if (!doc.exists) {
      console.log("NO DOC")

    } else {
      stationPortions[value] = doc.data().salesPortion
      console.log(stationPortions)                   //it will be shown at the last.
    }
  })
  return stationPortions
}

我认为 async 函数应该等待结果,但事实并非如此。 如果我的理解有误,我会感到困惑。 谢谢 (顺便说一下,fdb 是 firebase admin(firestore)

1 个答案:

答案 0 :(得分:1)

工作代码

const getStationPortions = async (stations) => {
  let stationPortions = {}
  await Promise.all(stations.map(async (value) => {
    const doc = await fdb.collection('Stations').doc(value).get()
    if (!doc.exists) {
      console.log("NO DOC")
    } else {
      stationPortions[value] = doc.data().salesPortion
      console.log(stationPortions)
    }
  }))
  return stationPortions
}
module.exports = router;