Loop Sequence break под функцией map после ожидания - PullRequest
0 голосов
/ 17 октября 2018

Я новичок в подходе Async, ожидаю обещания.Изучите очень основную часть асинхронного и ждать.Я нахожусь в ситуации, когда я хочу выполнить задачу последовательно, теперь для этого я написал код, но там цикл будет нарушать последовательность.

Мой код такой:

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 голосов
/ 17 октября 2018

Функции на карте асинхронные, поэтому возвращайте обещание.Они начнут выполняться по порядку, но могут не завершиться в том же порядке.При этом ожидание на Promise.all будет возвращать сопоставленный массив в правильном порядке.

Если вы хотите сделать их по порядку, то используйте уменьшение следующим образом:

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