Почему этот оператор `Promise.all ()` не ожидает разрешения обещаний? - PullRequest
0 голосов
/ 24 декабря 2018

Я написал фрагмент кода внутри асинхронной функции, которая должна одновременно создать четырех пользователей, сохранить их в MongoDB и напечатать сообщение, когда это будет сделано:

// Concurrently create dummy users
const dummyUserDict = [
    "name1",
    "name2",
    "name3",
    "name4"
];
const dummyUserPromises = dummyUserDict.map(async (name) => {
    let user = new User({
        _id: new mongoose.Types.ObjectId,
        username: name
    });
    return user
        .save()
        .then((result) => {
            console.log('Created user ' + result.username + '!');
        });
});

try {
    await Promise.all[dummyUserPromises];
} catch(e) {
    console.log(e);
}

console.log('Stop here!');

Я бы ожидал, что все dummyUserPromises должно быть решено при достижении конца кода, как я явно await их с Promise.all заранее.Когда я включаю отладчик и устанавливаю точку останова на console.log('Stop here!'), я нахожу, что все они все еще ожидают:

enter image description here

Почему это так?

1 Ответ

0 голосов
/ 24 декабря 2018

Вы должны вызвать функцию:

 await Promise.all(dummyUserPromises)

Используя [], вы пытаетесь получить доступ к свойству функции Promise.all, в результате чего undefined и await undefined не будетждать чего-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...