الدرس 6 من 8
مهلة للطلب
- 13 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
حدّ أقصى للانتظار
الشرح
الطلب الذي لا مهلة له قد ينتظر إلى الأبد إذا كانت الشبكة ضعيفة أو كان الخادم عالقًا، فيبقى المستخدم أمام «جارٍ التحميل…» دون نهاية. والأفضل أن يفشل الطلب بعد ثوانٍ برسالة واضحة، فيعرف المستخدم أن عليه إعادة المحاولة.
يُرجع Promise.race نتيجة أول وعد ينتهي، نجاحًا كانت أو فشلًا، فاجعل الطلب يتسابق مع وعد يُرفض عند انتهاء المهلة، فإن وصل الطلب أولًا مرّت نتيجته، وإن سبقه المؤقّت فشل السباق بخطأ المهلة.
وانتبه إلى أن المهلة تُنهي انتظارك أنت لا الطلب نفسه، فيبقى الطلب يعمل في الخلفية حتى يصل ردّه دون أن ينتظره أحد، أمّا إلغاؤه فعلًا فهو موضوع الدرس التالي.
المطلوب
اكتب الدالة withTimeout(promise, ms) لتُمرّر نتيجة الوعد كما هي، قيمةً كانت أو خطأً، إذا انتهى قبل ms، وإلا فلتُرفض بـ new Error('انتهت المهلة').
الفحوص
5 فحوص- الطلب السريع يمرّ بقيمته
- الطلب البطيء يُرفض عند انتهاء المهلة لا بعد وصوله
- الرفض يحمل خطأً يذكر المهلة
- خطأ الطلب نفسه يصل كما هو
- زرّ الطلب البطيء يعرض رسالة المهلة