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: تُكمل جميع المهام.
