Promises — الحالات والسلاسل ومعالجة الأخطاء
أنشئوا Promises واستخدموها: الحالات (pending/fulfilled/rejected)، وربط العمليات باستخدام then، ومعالجة الأخطاء باستخدام catch/finally
Promises — الحالات والسلاسل ومعالجة الأخطاء درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 3 دروس في المجموع.
مقدمة إلى Promise
الهدف: تعلّم أنماط Promise البسيطة.
- الحالات: pending ← fulfilled/rejected
- تسلسل then
- التقاط الأخطاء باستخدام catch
- التنظيف باستخدام finally

حل Promise
تبدأ Promise بالحالة pending وتصبح fulfilled عند استدعاء resolve.
// Create a Promise and resolve it
function waitMs(ms) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve("done");
}, ms);
});
}
console.log("Start");
waitMs(10).then(function (msg) {
console.log("Resolved:", msg);
});

الرفض والتقاط الخطأ
استخدموا reject(Error) عند حدوث فشل. ويتولى catch معالجة أي رفض يحدث قبله في السلسلة.
// Reject to signal an error; handle with catch
function maybeFail(ok) {
return new Promise(function (resolve, reject) {
if (ok) {
resolve("ok");
} else {
reject(new Error("bad"));
}
});
}
maybeFail(true)
.then(function (v) {
console.log("A:", v);
return maybeFail(false);
})
.catch(function (e) {
console.log("Caught:", e.message);
});

أساسيات تسلسل then
يمكن لكل then إعادة قيمة أو Promise. وتتلقى الخطوة التالية هذه القيمة.
// Chain then steps; return values flow to the next then
Promise.resolve(2)
.then(function (n) {
return n * 3;
})
.then(function (n) {
console.log("Result:", n);
});

التنظيف باستخدام finally
يُستخدم finally للتنظيف بعد النجاح أو الخطأ؛ ولا يتلقى القيمة أو الخطأ.
// finally runs whether fulfilled or rejected
function task(ok) {
return new Promise(function (resolve, reject) {
ok ? resolve("yay") : reject(new Error("oops"));
});
}
task(false)
.catch(function (e) {
console.log("Handled:", e.message);
})
.finally(function () {
console.log("Cleanup done");
});

لمحة عن Promise.all
تحل Promise.all بمصفوفة من النتائج، أو تُرفض إذا فشل أحد العناصر.
// Promise.all waits for all; rejects fast if any fail
const a = waitMs(5);
const b = Promise.resolve("B");
Promise.all([a, b])
.then(function (values) {
console.log("All:", values);
})
.catch(function (e) {
console.log("All failed:", e.message);
});

اختبار معالجة أخطاء Promise
تحقق سريع: أين تُعالَج الأخطاء؟

مراجعة
مراجعة: استخدموا resolve عند النجاح، وreject عند الأخطاء، وسلسلوا الخطوات باستخدام then، وعالجوا المشكلات باستخدام catch، واستخدموا finally للتنظيف.

الأسئلة الشائعة
هل درس «Promises — الحالات والسلاسل ومعالجة الأخطاء» مجاني؟
نعم — نص درس «Promises — الحالات والسلاسل ومعالجة الأخطاء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «Promises — الحالات والسلاسل ومعالجة الأخطاء»؟
أنشئوا Promises واستخدموها: الحالات (pending/fulfilled/rejected)، وربط العمليات باستخدام then، ومعالجة الأخطاء باستخدام catch/finally تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟
لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.
كم من الوقت يستغرق درس «Promises — الحالات والسلاسل ومعالجة الأخطاء»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟
نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- حلقة الأحداث وأساسيات Task مقابل Microtask
- Promises — الحالات والسلاسل ومعالجة الأخطاء
- Promise.all / any / race / allSettled — اختيار الأداة المناسبة