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

时间:2019-04-08 20:28:29

标签: javascript node.js promise

我只有几个Promise.all函数:

const fn = async () => {
   await Promise.all(first());
   await Promise.all(second());
   await Promise.all(third());
}

firstsecondthird函数的外观几乎相同。

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成功(更新用户并发送邮件),而secondthird则不成功甚至被称为。

在控制台中,出现错误:

UnhandledPromiseRejectionWarning: TypeError: undefined is not a function

我整日都在挣扎,该怎么办,所以所有三个Promise.all成功完成了吗?寻找帮助,在此先谢谢您。

1 个答案:

答案 0 :(得分:2)

您的问题是np.array([ 1, 2, 3, 4])接受了一个promise数组,但是您的Promise.all函数是first(),因此返回了对某些东西的promise。该承诺是不可迭代的,因此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));
      }))
    : [];
}