دروس الوحدة (1/4)
الوعود: ما هي
الوعد هو القيمة التي تمثل نتيجة عملية ستنتهي في المستقبل. ويمكن أن يكون في إحدى الحالات الثلاث:
- معلق — العملية لا تزال جارية
- تم التنفيذ — تم الانتهاء بنجاح، هناك قيمة
- مرفوض — فشل، هناك خطأ
بمجرد أن يغادر الحالة المعلقة، يتم "تسويته" إلى الأبد.
خلق وعد حلها
الطريقتان الأكثر شيوعًا - لن تتمكن أبدًا من إنشاء وعد "يدويًا" مع المُنشئ:
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));قراءة النتيجة: .then / .catch
Promise.resolve(10).then((v) => {
console.log(v); // 10
});
Promise.reject(new Error('no')).catch((e) => {
console.log(e.message); // 'no'
});يتلقى .then دالة يتم استدعاؤها بالقيمة التي تم حلها **.
.catch يتلقى وظيفة تسمى مع الخطأ في حالة الرفض.
تسلسل
كل .then يُرجع بدوره وعدًا: يمكنك ربطهم لتحويل
القيمة خطوة بخطوة.
Promise.resolve(5)
.then((n) => n * 2)
.then((n) => n + 1)
.then((n) => console.log(n)); // 11إذا قام أي من .then بإلقاء (أو إرجاع وعد فاشل)، فسيتم التنفيذ
ينتقل إلى أول .catch التالي.
منشئ (نادر)
const p = new Promise((resolve, reject) => {
if (Math.random() > 0.5) resolve('ok');
else reject(new Error('no'));
});ستستخدمه فقط عندما تحتاج إلى "الوعد" بشيء يستخدم عمليات رد الاتصال (مثل واجهات برمجة تطبيقات DOM القديمة أو setTimeout).
جربه
حدد `promisedVersion(n)` الذي، عند إعطاء رقم، يُرجع وعدًا تم حله بمضاعفة n.
إظهار التلميح
إرجاع الوعد.الحل (ن * 2)
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
حدد "incrementThree(p)" الذي يتلقى وعدًا برقم ويعيد وعدًا بالرقم + 3. استخدم سلسلة .then.
إظهار التلميح
ص.ثم((ن) => ن + 3)
الحل متاح بعد 3 من المحاولات