الانتقال إلى المحتوى الرئيسي
الوحدة 7 · الدرس 1 من 425/32 في الدورة~12 min
دروس الوحدة (1/4)

الوعود: ما هي

الوعد هو القيمة التي تمثل نتيجة عملية ستنتهي في المستقبل. ويمكن أن يكون في إحدى الحالات الثلاث:

  • معلق — العملية لا تزال جارية
  • تم التنفيذ — تم الانتهاء بنجاح، هناك قيمة
  • مرفوض — فشل، هناك خطأ

بمجرد أن يغادر الحالة المعلقة، يتم "تسويته" إلى الأبد.

خلق وعد حلها

الطريقتان الأكثر شيوعًا - لن تتمكن أبدًا من إنشاء وعد "يدويًا" مع المُنشئ:

JS
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));

قراءة النتيجة: .then / .catch

JS
Promise.resolve(10).then((v) => {
  console.log(v); // 10
});

Promise.reject(new Error('no')).catch((e) => {
  console.log(e.message); // 'no'
});

يتلقى .then دالة يتم استدعاؤها بالقيمة التي تم حلها **. .catch يتلقى وظيفة تسمى مع الخطأ في حالة الرفض.

تسلسل

كل .then يُرجع بدوره وعدًا: يمكنك ربطهم لتحويل القيمة خطوة بخطوة.

JS
Promise.resolve(5)
  .then((n) => n * 2)
  .then((n) => n + 1)
  .then((n) => console.log(n)); // 11

إذا قام أي من .then بإلقاء (أو إرجاع وعد فاشل)، فسيتم التنفيذ ينتقل إلى أول .catch التالي.

منشئ (نادر)

JS
const p = new Promise((resolve, reject) => {
  if (Math.random() > 0.5) resolve('ok');
  else reject(new Error('no'));
});

ستستخدمه فقط عندما تحتاج إلى "الوعد" بشيء يستخدم عمليات رد الاتصال (مثل واجهات برمجة تطبيقات DOM القديمة أو setTimeout).

جربه

تمرين#js.m7.l1.e1
المحاولات: 0جارٍ التحميل…

حدد `promisedVersion(n)` الذي، عند إعطاء رقم، يُرجع وعدًا تم حله بمضاعفة n.

جارٍ تحميل المحرر…
إظهار التلميح

إرجاع الوعد.الحل (ن * 2)

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#js.m7.l1.e2
المحاولات: 0جارٍ التحميل…

حدد "incrementThree(p)" الذي يتلقى وعدًا برقم ويعيد وعدًا بالرقم + 3. استخدم سلسلة .then.

جارٍ تحميل المحرر…
إظهار التلميح

ص.ثم((ن) => ن + 3)

الحل متاح بعد 3 من المحاولات