幕布斯6054654
2021-04-16 17:19:08
我有幾個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
提交
取消