שיעורי מודול (1/4)
הבטחות: מה הם
הבטחה היא ערך המייצג את התוצאה של פעולה שתסתיים בעתיד. זה יכול להיות באחד משלושת המצבים:
- בהמתנה - הפעולה עדיין בעיצומה
- מומש - זה הסתיים בהצלחה, יש ערך
- נדחה - זה נכשל, יש שגיאה
ברגע שהוא עוזב את המצב הממתין, הוא "מיושב" לנצח.
יצירת הבטחה פתורה
שתי הדרכים הנפוצות ביותר - כמעט לעולם לא תיצור הבטחה "ביד" עם הקונסטרוקטור:
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));קריאת התוצאה: .then / .catch
Promise.resolve(10).then((v) => {
console.log(v); // 10
});
Promise.reject(new Error('no')).catch((e) => {
console.log(e.message); // 'no'
});.then מקבל פונקציה שנקראת עם הערך שנפתר.
.catch מקבל פונקציה שנקראת עם השגיאה במקרה של דחייה.
שִׁרשׁוּר
כל .then מחזיר בתורו הבטחה: אתה יכול לשלשל אותם כדי להפוך את
ערך צעד אחר צעד.
Promise.resolve(5)
.then((n) => n * 2)
.then((n) => n + 1)
.then((n) => console.log(n)); // 11אם אחד מה-.then זורק (או מחזיר הבטחה שנכשלת), ביצוע
קופץ ל-.catch הראשון הבא.
קונסטרוקטור (נדיר)
const p = new Promise((resolve, reject) => {
if (Math.random() > 0.5) resolve('ok');
else reject(new Error('no'));
});אתה תשתמש בו רק כאשר אתה צריך "להבטיח" משהו שמשתמש בהתקשרות חוזרת (למשל ממשקי API ישנים של DOM או setTimeout).
נסה את זה
הגדר `promisedVersion(n)` שבהינתן מספר, מחזירה הבטחה שנפתרה עם כפול של n.
הצג רמז
החזר Promise.resolve(n * 2)
הפתרון זמין לאחר 3 ניסיונות
סקירת התרגיל
הגדר 'incrementThree(p)' שמקבל הבטחה של מספר ומחזיר הבטחה של המספר + 3. השתמש בשרשרת .then.
הצג רמז
p.then((n) => n + 3)
הפתרון זמין לאחר 3 ניסיונות