اختبار: 9 أسئلة عن JavaScript Promise
لا تخلف بوعدك أبدًا!
هل تعرف JavaScript Promises؟
- أثبت مهاراتك في JavaScript! 🚀
- تحقق من التلميحات (زر كبير، الزاوية السفلية).
- جرب الكود في وحدة التحكم في متصفحك (جرب الاختصار
F12أو ابحث عنه) أو استخدم repl.it*. - لا تتردد في التغريد لي @justsml. أود سماع أفكارك!
👇 أكمل 9 أسئلة أدناه👇
ماذا سيكون الناتج للكود التالي؟
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))})p.catch(error => console.log(error.message))p.catch(error => console.log(error.message))نقوم بإنشاء Promise باستخدام طريقة المُنشئ، مما يؤدي إلى إطلاق خطأ فورًا باستخدام رد الاتصال reject.
ثم تعمل معالجات .catch مثل .addEventListener(event, callback) في DOM أو .on(event, callback) في Event Emitter حيث يمكن إضافة معالجات متعددة. سيتم استدعاء كل منها بنفس الوسائط.
ماذا سيكون الناتج للكود التالي؟
var p = new Promise((resolve, reject) => { return Promise.reject(Error('The Fails!'))})p.catch(error => console.log(error.message))p.catch(error => console.log(error.message))عند استخدام مُنشئ Promise، يجب عليك استدعاء إما resolve() أو reject(). يتجاهل مُنشئ Promise القيمة المُرجعة من المُنفذ، لذا فإن الوعد الإضافي الذي تم إنشاؤه باستخدام Promise.reject() ليس متسلسلاً مع p. المُعالجان مُرفقان بـ p، الذي يظل معلقًا، بينما يتم الإبلاغ عن الوعد المرفوض المُعاد كوعد غير معالج من قبل البيئة المضيفة.
ماذا سيكون الناتج للكود التالي؟
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error)).then(error => console.log(error))عند ربط .then و .catch، من المفيد التفكير بهما كسلسلة من الخطوات. كل .then يستقبل القيمة التي أرجعها .then السابق (كوسيطة له). لكن، إذا واجهت “الخطوة” خطأ، سيتم تخطي أي .then لاحق حتى يتم الوصول إلى .catch. إذا أردت تجاوز الخطأ، كل ما عليك فعله هو إرجاع قيمة غير خطأ. يمكن الوصول إليها عبر أي .then لاحق.
ماذا سيكون الناتج للكود التالي؟
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error.message)).catch(error => console.log(error.message))عند ربط دوال .catch، كل واحدة منها تتعامل فقط مع الأخطاء التي تُرمى في خطوات .then أو .catch السابقة. في هذا المثال، الدالة الأولى .catch تُرجع console.log الذي لا يمكن الوصول إليه إلا بإضافة .then() بعد كلا الدالتين .catch.
ماذا سيكون الناتج للكود التالي؟
new Promise((resolve, reject) => { resolve('Success!') }) .then(() => { throw Error('Oh noes!') }) .catch(error => { return "actually, that worked" }) .catch(error => console.log(error.message))تلميح: يمكن استخدام .catch’s لتجاهل (أو تجاوز) الأخطاء ببساطة عن طريق إرجاع قيمة عادية.
هذه الحيلة تعمل فقط عندما يكون هناك .then لاحق لاستلام القيمة.
ماذا سيكون الناتج للكود التالي؟
Promise.resolve('Success!') .then(data => { return data.toUpperCase() }) .then(data => { console.log(data) })تلميح: .then’s تمرر البيانات بشكل تسلسلي، من return value إلى .then(value => /* handle value */) التالي.
إن return هو المفتاح لتمرير قيمة إلى .then التالي.
ما هو ناتج الكود التالي؟
Promise.resolve('Success!') .then(data => { return data.toUpperCase() }) .then(data => { console.log(data) return data }) .then(console.log)هناك استدعاءان لـ console.log سيتم استدعاؤهما.
ماذا سيكون الناتج للكود التالي؟
Promise.resolve('Success!') .then(data => { data.toUpperCase() }) .then(data => { console.log(data) })تلميح: تمرر دوال .then البيانات بشكل تسلسلي، من return value إلى .then التالي (value => /* handle value */).
return هو الأساس لتمرير قيمة إلى .then التالي.
ماذا سيكون الناتج للكود التالي؟
Promise.resolve('Success!') .then(() => { throw Error('Oh noes!') }) .catch(error => { return 'actually, that worked' }) .then(data => { throw Error('The fails!') }) .catch(error => console.log(error.message))