الدرس 5 من 8
طلبات متوازية
- 13 دقيقة
- 4 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
زمن أبطأ طلب لا مجموع الأزمنة
الشرح
عندك ثلاثة طلبات لا يحتاج أيّ منها نتيجة الآخر، ومع ذلك يكتبها أكثرنا بـ await بعد await، فينتظر كل سطر الذي قبله، ويصير الزمن الكلّي مجموع أزمنة الطلبات بدل زمن أطولها. وأشهر صورة لهذه المشكلة أن تضع await داخل حلقة for.
أمّا Promise.all فيُطلق الطلبات كلّها معًا وينتظرها مرّة واحدة، ثم يُرجع النتائج بترتيب الطلبات لا بترتيب وصولها.
وانتبه إلى أن Promise.all يفشل كلّه إذا فشل طلب واحد، فإن كان يكفيك جزء من النتائج فاستعمل Promise.allSettled. أمّا الطلب الذي يحتاج نتيجة طلب آخر فيبقى بعده بـ await، لأن التوازي يصلح للطلبات المستقلّة وحدها.
المطلوب
أعد كتابة loadAll(names) لتُطلق الطلبات كلّها معًا وتُرجع نتائجها بترتيب names، واضغط الزرّ قبل التعديل وبعده لتقارن الزمن.
الفحوص
4 فحوص- النتائج كاملة وبترتيب الطلب
- الطلبات تنطلق كلّها فورًا لا واحدًا بعد الآخر
- الزمن هو زمن أبطأ طلب لا مجموع الطلبات
- تعمل مع أيّ قائمة وبأيّ ترتيب