为什么此Promise.all()语句不等待承诺解决?

时间:2018-12-24 14:14:58

标签: javascript asynchronous mongoose async-await

我在异步函数中编写了一段代码,该代码将同时创建四个用户,将它们保存到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 :(得分:3)

您必须调用该函数:

 await Promise.all(dummyUserPromises)

使用[]尝试访问Promise.all函数的属性,这将导致undefinedawait undefined不会等待任何东西。