يا شباب أنا بكتب كود في Node.js وظيفته يمر على قائمة من المعرفات (User IDs)، ويجلب بيانات كل مستخدم من قاعدة البيانات باستعمال دالة async محاطة بـ forEach.
المطلوب:
تجميع كافة بيانات المستخدمين داخل مصفوفة usersData وإرجاع القائمة مكتملة بعد معالجة جميع المعرفات.
المشكلة اللي مقابلاني:
الدالة بتبعت الاستجابة قبل ما كود جلب البيانات يخلص أصلًا! المصفوفة بترجع فاضية [] بالرغم من إن الكود جواه await والبيانات بتطبع في الـ console.log بعد ما تكون الصفحة خلاص اتقفلت!
async function fetchAllUsers(userIds) {
const usersData = [];
// السطر المشتبه فيه: forEach لا تحترم الـ Promises
userIds.forEach(async (id) => {
const user = await getUserFromDB(id); // دالة بترجع Promise
usersData.push(user);
});
// السطر ده بيتنفذ فوريًا قبل ما أي await جوه forEach تخلص!
return usersData;
}
// دالة وهمية محاكاة لقاعدة البيانات
async function getUserFromDB(id) {
return new Promise(resolve => setTimeout(() => resolve({ id, name: `User ${id}` }), 500));
}
التعليقات (2)
سجّل دخولك لإضافة تعليق
تسجيل الدخول