我是Async Await Promise方法的新手。学习异步和等待的非常基本的部分。我处于要按顺序执行任务的情况,为此,我编写了代码,但是循环会中断序列。
我的代码是这样的:
const myAsyncFunction = async () => {
try {
let db1Data = await MyCollection1Name.find().exec();
if (db1Data.length > 0) {
//Suppose this collection have sector element which is array and have 5 values
let newData = db1Data[0].sector;
await Promise.all(
newData.map(async(x, i) => {
let db2Data = await MyCollection2Name.find().exec();
console.log(i)// Here My loop is break. It not print the value in sequential order. Although this will call after await
})
)
}
} catch (e) {
console.log(e)
}
}
myAsyncFunction()
任何人都可以指导我在哪里做错了吗?
任何帮助或建议都非常感谢。
答案 0 :(得分:1)
映射中的函数是异步的,因此返回一个Promise。它们将按顺序开始执行,但可能不会按相同的顺序完成。不过,Promise.all上的await将以正确的顺序返回映射的数组。
如果要按顺序进行操作,请使用reduce方法,如下所示:
newData.reduce(
async (acc, curr) => acc.then(res => MyCollection2Name.find().exec()),
Promise.resolve()
)