DanLevy.net

اختبار: 9 أسئلة عن JavaScript Promise

لا تخلف بوعدك أبدًا!

Hero image for اختبار: 9 أسئلة عن JavaScript Promise

هل تعرف JavaScript Promises؟

  1. تحقق من التلميحات (زر كبير، الزاوية السفلية).
  2. جرب الكود في وحدة التحكم في متصفحك (جرب الاختصار F12 أو ابحث عنه) أو استخدم repl.it*.
  3. لا تتردد في التغريد لي @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، الذي يظل معلقًا، بينما يتم الإبلاغ عن الوعد المرفوض المُعاد كوعد غير معالج من قبل البيئة المضيفة.

ماذا سيكون الناتج للكود التالي؟

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))

annotated-code/question-9-4.webp