DanLevy.net

חידון: 9 שאלות Promise ב-JavaScript

לעולם אל תפר הבטחה שוב!

Hero image for חידון: 9 שאלות Promise ב-JavaScript

האם אתה מכיר את 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 באמצעות מתודת הבנאי, ומפעילים שגיאה מידית עם ה-callback reject.

לאחר מכן, מטפלי .catch פועלים כמו .addEventListener(event, callback) של ה-DOM או .on(event, callback) של Event Emitter, שבהם ניתן להוסיף מספר callbacks של מטפלים. כל אחד ייקרא עם אותם הארגומנטים.

מה יהיה הפלט עבור הקוד הבא?

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’ים כדי להתעלם (או לעקוף) שגיאות פשוט על ידי החזרת ערך רגיל.

This trick works only when there is a subsequent .then to receive the value.

מה יהיה הפלט של הקוד הבא?

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)

ישנן 2 קריאות console.log שייקראו.

מה תהיה הפלט עבור הקוד הבא?

Promise.resolve('Success!')
.then(data => {
data.toUpperCase()
})
.then(data => {
console.log(data)
})

רמז: .then’s מעבירים נתונים ברצף, מ-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