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

אסינכרון / ממתין

async/await הוא תחביר ברור יותר לעבודה עם הבטחות: הקוד נקרא כמו קוד סינכרוני, אבל מאחורי הקלעים הוא משתמש בדיוק באותן הבטחות כמו בשיעור הקודם.

async function

פונקציה המוצהרת עם async תמיד מחזירה הבטחה.

JS
async function forty() {
  return 40;
}

forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40

גם אם תחזיר ערך "רגיל", הפונקציה עוטפת אותו בהבטחה שנפתרה.

await

בתוך async function אתה יכול לשים await לפני הבטחה: הביצוע מושהה עד שההבטחה מתיישבת, ואז ממשיכה עם הערך שנפתר.

JS
async function sum() {
  const a = await Promise.resolve(10);
  const b = await Promise.resolve(20);
  return a + b; // 30
}

שווה ערך בסגנון .then (יותר מילולית):

JS
function sum() {
  return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}

await מפיץ שגיאות

אם ההבטחה נדחתה, await מחזיר את השגיאה. אתה יכול לתפוס את זה עם רגיל try/catch:

JS
async function read() {
  try {
    const x = await Promise.reject(new Error('no'));
    return x;
  } catch (err) {
    return 'error: ' + err.message;
  }
}

read(); // Promise { 'error: no' }

חץ אסינכרון

JS
const double = async (n) => n * 2;
double(5); // Promise { 10 }

נסה את זה

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

הגדר `פונקציית אסינכרון addOne(p)` שמקבלת הבטחה של מספר ומחזירה (כהבטחה) את המספר + 1. השתמש בהמתנה.

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

const n = await p; החזר n + 1;

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

סקירת התרגיל

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

הגדר 'sumTwo(pa, pb)' אסינכרון: מקבל שתי הבטחות של מספרים, מחזיר את הסכום שלהם. השתמש בשתי המתנה עוקבות.

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

המתן לכל אחד ואז החזר a + b.

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