Nodejs 等到异步映射函数完成执行
Posted
技术标签:
【中文标题】Nodejs 等到异步映射函数完成执行【英文标题】:Nodejs wait until async map function finishes executing 【发布时间】:2021-02-13 17:36:21 【问题描述】:我有一个数组映射,我需要在完成映射后执行一些代码。
这里是数组映射代码
studentList.map( async index =>
try
const student = await User.findOne(indexNumber: index)
if (student == null)
emptyStudents.push(index)
catch(err)
console.log(err)
)
我该怎么做?由于这是异步的,我无法找到解决方案。
【问题讨论】:
【参考方案1】:await Promise.all(studentList.map( async index =>
try
const student = await User.findOne(indexNumber: index)
if (student == null)
emptyStudents.push(index)
))
【讨论】:
这是正确的,但稍微解释一下会很好,尤其是因为 Promise 一开始很难理解。【参考方案2】:您可以尝试使用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
【讨论】:
【参考方案3】:您可以使用地图返回承诺,然后当它们完成时,您可以在地图之外推送到您的数组 -
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)
)
【讨论】:
以上是关于Nodejs 等到异步映射函数完成执行的主要内容,如果未能解决你的问题,请参考以下文章