users.forEach(async (user) => {
await sendEmail(user);
});
console.log("Done");بیشتر افراد انتظار دارند:
ابتدا تمام ایمیلها ارسال شوند،
سپس
"Done" چاپ شود.اما در واقع:
❌ تابع ( )
forEach منتظر Promiseها نمیماند.راه بهتر:
for (const user of users) {
await sendEmail(user);
}یا اگر اجرای همزمان مدنظر است:
await Promise.all(
users.map(sendEmail)
);
---
🎯 تفاوت بین این سه روش، فقط سینتکس نیست؛ رفتار برنامه را تغییر میدهد.
💡 بیشتر باگهای Async از ندانستن رفتار Event Loop و Promiseها ایجاد میشوند.
@CodeVerse_dev