CodeVerse | دنیای برنامه نویسان
⚡ چرا forEach همیشه انتخاب خوبی نیست؟
این کد رو زیاد میبینیم:
users.forEach(async (user) => {
await sendEmail(user);
});
ظاهرش کاملاً منطقیه.
ولی یک مشکل مهم داره:
تابع forEach منتظر Promiseهای داخل Callback نمیمونه.
یعنی ممکنه همه sendEmailها تقریباً همزمان شروع بشن و کدی که بعد از forEach نوشته شده، قبل از تمام شدن اونها اجرا بشه.
اگر واقعاً میخوای یکییکی اجرا بشن:
for (const user of users) {
await sendEmail(user);
}
و اگر مستقل از هم هستن و میخوای همزمان اجرا بشن:
await Promise.all(
users.map(user => sendEmail(user))
);
تفاوت این دو فقط Syntax نیست.
اولی:
کنترلشده و ترتیبی
دومی:
همزمان و سریعتر، ولی با مصرف منابع بیشتر
پس وقتی Async Code مینویسی، همیشه از خودت بپرس:
این عملیات باید یکییکی انجام بشه یا واقعاً میتونن همزمان اجرا بشن؟
همین یک سؤال میتونه جلوی کلی Bug و Performance Problem رو بگیره.
@CodeVerse_dev
5 · 424 ·