الدرس 6 من 8

مهلة للطلب

هدف الدرس

حدّ أقصى للانتظار

01

الشرح

الطلب الذي لا مهلة له قد ينتظر إلى الأبد إذا كانت الشبكة ضعيفة أو كان الخادم عالقًا، فيبقى المستخدم أمام «جارٍ التحميل…» دون نهاية. والأفضل أن يفشل الطلب بعد ثوانٍ برسالة واضحة، فيعرف المستخدم أن عليه إعادة المحاولة.

يُرجع Promise.race نتيجة أول وعد ينتهي، نجاحًا كانت أو فشلًا، فاجعل الطلب يتسابق مع وعد يُرفض عند انتهاء المهلة، فإن وصل الطلب أولًا مرّت نتيجته، وإن سبقه المؤقّت فشل السباق بخطأ المهلة.

وانتبه إلى أن المهلة تُنهي انتظارك أنت لا الطلب نفسه، فيبقى الطلب يعمل في الخلفية حتى يصل ردّه دون أن ينتظره أحد، أمّا إلغاؤه فعلًا فهو موضوع الدرس التالي.

02

المطلوب

اكتب الدالة withTimeout(promise, ms) لتُمرّر نتيجة الوعد كما هي، قيمةً كانت أو خطأً، إذا انتهى قبل ms، وإلا فلتُرفض بـ new Error('انتهت المهلة').

الفحوص

5 فحوص
  1. الطلب السريع يمرّ بقيمته
  2. الطلب البطيء يُرفض عند انتهاء المهلة لا بعد وصوله
  3. الرفض يحمل خطأً يذكر المهلة
  4. خطأ الطلب نفسه يصل كما هو
  5. زرّ الطلب البطيء يعرض رسالة المهلة
03

تلميحات

0/3
دروس المسارأتممت 0 من 8

تتعلّم هنا قراءة JSON وانتظار ردّ الخادم والتعامل مع حالات التحميل والفشل، وهذا ما يفرّق بين نموذج تجريبي ومنتج يعتمد عليه الناس.

مستواه متوسّط، وفيه 8 دروس مجموع مدّتها ساعتان.

index.html
المعاينة
index.html100%
–/5

اضغط «تشغيل وتصحيح» ليبدأ الفحص.

تجد 5 فحوص في بطاقة «المطلوب».

دروس المسارأتممت 0 من 8

تتعلّم هنا قراءة JSON وانتظار ردّ الخادم والتعامل مع حالات التحميل والفشل، وهذا ما يفرّق بين نموذج تجريبي ومنتج يعتمد عليه الناس.

مستواه متوسّط، وفيه 8 دروس مجموع مدّتها ساعتان.