חידון: 9 שאלות Promise ב-JavaScript
לעולם אל תפר הבטחה שוב!
האם אתה מכיר את 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 באמצעות מתודת הבנאי, ומפעילים שגיאה מידית עם ה-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, שנשאר בהמתנה, בעוד שהבטחה הנדחת שהוחזרה מדווחת כלא מטופלת על ידי סביבת האירוח.
מה תהיה הפלט עבור הקוד הבא?
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’s, כל אחד מטפל רק בשגיאות שנזרקות ב-.then או .catch הקודמים (“צעדים”). בדוגמה זו, ה-.catch הראשון מחזיר את ה-console.log שניתן לגשת אליו רק על ידי הוספת .then() אחרי שני ה-.catch’s.
מה תהיה הפלט עבור הקוד הבא?
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))