我在异步函数中编写了一段代码,该代码将同时创建四个用户,将它们保存到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!')
处设置断点时,我发现它们都仍在等待处理:
这是为什么?
答案 0 :(得分:3)
您必须调用该函数:
await Promise.all(dummyUserPromises)
使用[]
尝试访问Promise.all
函数的属性,这将导致undefined
和await undefined
不会等待任何东西。