JavaScript Promises

يمثل الـ Promise نتيجة لمهمة غير متزامنة (asynchronous).

تُستخدم الـ Promises في استدعاءات الـ API، واستعلامات قواعد البيانات، وقراءة الملفات.

يتكون الـ Promise من ثلاث حالات:

  • Pending: المهمة لا تزال قيد التنفيذ.
  • Fulfilled: انتهت المهمة بنجاح.
  • Rejected: فشلت المهمة بسبب خطأ ما.

تبدو البنية البرمجية بهذا الشكل:

const promise = new Promise((resolve, reject) => {
  // The executor runs immediately
});

يمكنك التعامل مع النتائج باستخدام هذه الطرق:

  • .then(): تُنفذ عندما تنجح الـ promise.
  • .catch(): تُنفذ عندما تفشل الـ promise.
  • .finally(): تُنفذ عند انتهاء المهمة بغض النظر عن النتيجة.

قواعد هامة يجب تذكرها:

  • النتيجة الأولى هي التي تُعتمد. إذا استدعيت resolve() ثم reject()، فإن resolve هي التي تفوز.
  • دالة الـ executor تعمل بشكل متزامن (synchronously).
  • استخدام async و await يجعل الكود الخاص بك أسهل في القراءة مقارنة باستخدام .then().

التعامل مع عدة وعود (promises):

  • Promise.all(): تتبع نهج "الفشل السريع" (fail-fast). إذا فشلت إحدى الوعود، تفشل المجموعة بأكملها.
  • Promise.allSettled(): تنتظر انتهاء كل الوعود. وتُرجع النتائج حتى لو فشلت بعض المهام.

ملخص:

  • Promise: معالج لنتائج العمليات غير المتزامنة.
  • resolve: تشير إلى النجاح.
  • reject: تشير إلى الفشل.
  • async/await: طريقة أكثر نظافة لكتابة الوعود.
  • Promise.all: تتوقف عند أول خطأ.
  • Promise.allSettled: تُكمل جميع المهام.

المصدر: https://dev.to/malik786/javascript-promises-2hn4