الدرس 7 من 8
أخطاء الوعود
- 13 دقيقة
- 4 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
ما لا تنتظره لا تلتقطه
الشرح
لا يلتقط try/catch إلا ما يُرمى داخل كتلته، والوعد الذي لا تنتظره يُرفض لاحقًا بعد أن يكون التنفيذ قد خرج من الكتلة، فلا يراه catch أبدًا، والنتيجة صفحة تقول «تم الحفظ» مع أن الحفظ فشل.
والإصلاح كلمة واحدة، وهي await داخل try، فيصير الرفض خطأً عاديًّا يُرمى من السطر نفسه ويصل إلى catch.
وقد لا تريد الانتظار عمدًا أحيانًا، كأن ترسل إحصاءً لا يستحق أن يؤخّر المستخدم، لكن الرفض الذي لا يعالجه أحد لا يختفي، بل يظهر في الطرفية «رفضًا غير معالَج» ويضيع سببه، لذلك يحتاج كل وعد لا تنتظره إلى .catch خاصّ به.
المطلوب
أصلح save() لتُظهر في #msg السبب الحقيقي للفشل، ولا تعلن النجاح قبل أن يتمّ، وعالج رفض track دون أن تنتظره.
الفحوص
4 فحوص- فشل الحفظ لا يظهر كأنه نجاح
- رسالة الفشل تذكر سببه الحقيقي
- النجاح لا يُعلَن قبل أن يتمّ
- لا يوجد رفض يضيع دون معالجة