我有几个Promise.all功能:const fn = async () => { await Promise.all(first()); await Promise.all(second()); await Promise.all(third());}first,second并且third功能看起来几乎一样。first 功能:const first = async () => { const oldUsers = await User.find(...); return Array.isArray(oldUsers) ? oldUsers.map(async (user) => { await User.updateOne({ _id: user._id }, { ... }); await transporter.sendMail(sendMail(user)); }) : [];};我的问题:启动应用程序并调用fn函数时,只有第一个Promise.all成功(用户已更新并发送邮件),但second和third甚至没有被调用。在控制台中,出现错误:UnhandledPromiseRejectionWarning: TypeError: undefined is not a function我整日都在挣扎,该怎么办,所以这三个Promise.all都成功完成了吗?寻求帮助,在此先谢谢您。
1 回答
萧十郎
TA贡献1815条经验 获得超13个赞
您的问题是Promise.all需要一系列承诺,但是您的first()功能是async,因此会返回某些承诺。这个承诺是不可迭代的,因此Promise.all失败了。你可以通过做来解决
await Promise.all(await first());
但实际上您应该将Promise.all移入first函数本身:
async function first() {
const oldUsers = await User.find(...);
return Array.isArray(oldUsers)
? Promise.all(oldUsers.map(async (user) => {
await User.updateOne({ _id: user._id }, { ... });
await transporter.sendMail(sendMail(user));
}))
: [];
}
async function fn() {
await first();
await second();
await third();
}
添加回答
举报
0/150
提交
取消