我只有几个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
成功完成了吗?寻找帮助,在此先谢谢您。
答案 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));
}))
: [];
}