等待后在映射功能下循环序列中断

时间:2018-10-17 09:49:38

标签: javascript promise async-await

我是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()

任何人都可以指导我在哪里做错了吗?

任何帮助或建议都非常感谢。

1 个答案:

答案 0 :(得分:1)

映射中的函数是异步的,因此返回一个Promise。它们将按顺序开始执行,但可能不会按相同的顺序完成。不过,Promise.all上的await将以正确的顺序返回映射的数组。

如果要按顺序进行操作,请使用reduce方法,如下所示:

newData.reduce(
    async (acc, curr) => acc.then(res => MyCollection2Name.find().exec()),
    Promise.resolve()
)