繁体   English   中英

Nodejs 等待异步映射函数完成执行

[英]Nodejs wait until async map function finishes executing

我有一个数组映射,完成映射后我需要执行一些代码。

这是数组映射代码

    studentList.map( async index => {
      try{
        const student = await User.findOne({indexNumber: index})
        if (student == null) {
          emptyStudents.push(index)
        }
      }

      catch(err){
        console.log(err)
      }
    })

我怎样才能做到这一点? 由于这是异步的,我无法为此找到解决方案。

您可以使用地图返回承诺,然后当它们完成时,您可以在地图之外推送到您的数组 -

const studentPromises = studentList.map( async index => {
    return User.findOne({indexNumber: index})
})

const studentResults = await Promise.all(studentPromises)

studentResults.forEach((student) => {
    if (student == null) {
        emptyStudents.push(index)
    }
})
await Promise.all(studentList.map( async index => {
  try{
    const student = await User.findOne({indexNumber: index})
    if (student == null) {
      emptyStudents.push(index)
    }
  }
}))

您可以尝试使用Promise包装您的数组映射(并在async函数中运行它):

await new Promise((resolve, reject) => {
  studentList.map( async index => {
    try{
      const student = await User.findOne({indexNumber: index})
      if (student == null) {
        emptyStudents.push(index)
      }
      if (studentList.length - 1 === index) {
        resolve();
      }
    }

    catch(err) {
      console.log(err);
      reject(err);
    }
  })
});

// YOUR CODE HERE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM