דילוג לתוכן המרכזי
מודול 7 · שיעור 1 מתוך 425/32 בקורס~12 min
שיעורי מודול (1/4)

הבטחות: מה הם

הבטחה היא ערך המייצג את התוצאה של פעולה שתסתיים בעתיד. זה יכול להיות באחד משלושת המצבים:

  • בהמתנה - הפעולה עדיין בעיצומה
  • מומש - זה הסתיים בהצלחה, יש ערך
  • נדחה - זה נכשל, יש שגיאה

ברגע שהוא עוזב את המצב הממתין, הוא "מיושב" לנצח.

יצירת הבטחה פתורה

שתי הדרכים הנפוצות ביותר - כמעט לעולם לא תיצור הבטחה "ביד" עם הקונסטרוקטור:

JS
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));

קריאת התוצאה: .then / .catch

JS
Promise.resolve(10).then((v) => {
  console.log(v); // 10
});

Promise.reject(new Error('no')).catch((e) => {
  console.log(e.message); // 'no'
});

.then מקבל פונקציה שנקראת עם הערך שנפתר. .catch מקבל פונקציה שנקראת עם השגיאה במקרה של דחייה.

שִׁרשׁוּר

כל .then מחזיר בתורו הבטחה: אתה יכול לשלשל אותם כדי להפוך את ערך צעד אחר צעד.

JS
Promise.resolve(5)
  .then((n) => n * 2)
  .then((n) => n + 1)
  .then((n) => console.log(n)); // 11

אם אחד מה-.then זורק (או מחזיר הבטחה שנכשלת), ביצוע קופץ ל-.catch הראשון הבא.

קונסטרוקטור (נדיר)

JS
const p = new Promise((resolve, reject) => {
  if (Math.random() > 0.5) resolve('ok');
  else reject(new Error('no'));
});

אתה תשתמש בו רק כאשר אתה צריך "להבטיח" משהו שמשתמש בהתקשרות חוזרת (למשל ממשקי API ישנים של DOM או setTimeout).

נסה את זה

פעילות גופנית#js.m7.l1.e1
ניסיונות: 0טוען...

הגדר `promisedVersion(n)` שבהינתן מספר, מחזירה הבטחה שנפתרה עם כפול של n.

טוען עורך...
הצג רמז

החזר Promise.resolve(n * 2)

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#js.m7.l1.e2
ניסיונות: 0טוען...

הגדר 'incrementThree(p)' שמקבל הבטחה של מספר ומחזיר הבטחה של המספר + 3. השתמש בשרשרת .then.

טוען עורך...
הצג רמז

p.then((n) => n + 3)

הפתרון זמין לאחר 3 ניסיונות