الدرس 10 من 10
أنواع الوعود
- 15 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
لكل انتظار نوعه
الشرح
الدالة async تُرجع وعدًا (Promise) دائمًا، فناتج fetchUser(1) ليس مستخدمًا بل Promise<...>، ولهذا لا يمرّ نسيان await دون أن تنتبه، فـfetchUser(1).email خطأ عند الترجمة لأن الوعد ليس فيه بريد.
وحين لا تصدّر المكتبة نوع ناتج دوالها فاشتقّه أنت، فـReturnType<typeof fetchUser> يعطيك نوع الوعد، وAwaited تستخرج منه نوع ما بداخله.
وPromise.all تحفظ نوع كل عنصر بحسب مكانه، فالسطر const [user, orders] = await Promise.all([fetchUser(id), fetchOrders(id)]) يعطي كل متغيّر نوعه الصحيح. والاستدعاءان يجريان في الوقت نفسه، فلا تنتظر إلا بقدر الأبطأ منهما لا بقدر مجموعهما.
المطلوب
عرّف User بـAwaited<ReturnType<typeof fetchUser>>، ثم اكتب loadSummary(id: number): Promise<Summary> بحيث تجلب المستخدم وطلبات شرائه معًا بـPromise.all، وتُرجع { user, spent }، وspent فيه مجموع قيم total.
الفحوص
5 فحوص- لا توجد أخطاء في الأنواع
- الملخّص صحيح
- الاستدعاءان يجريان في الوقت نفسه
- النوع User هو نوع ما بداخل الوعد
- النوع User لا يقبل كائنًا ناقصًا