猿问

处理Promise.all中的错误-承诺拒绝+类型错误

我有几个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都成功完成了吗?寻求帮助,在此先谢谢您。


幕布斯6054654
浏览 210回答 1
1回答

萧十郎

您的问题是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();}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答