שיעורי מודול (2/4)
אסינכרון / ממתין
async/await הוא תחביר ברור יותר לעבודה עם הבטחות: הקוד נקרא כמו
קוד סינכרוני, אבל מאחורי הקלעים הוא משתמש בדיוק באותן הבטחות כמו בשיעור הקודם.
async function
פונקציה המוצהרת עם async תמיד מחזירה הבטחה.
async function forty() {
return 40;
}
forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40גם אם תחזיר ערך "רגיל", הפונקציה עוטפת אותו בהבטחה שנפתרה.
await
בתוך async function אתה יכול לשים await לפני הבטחה: הביצוע מושהה
עד שההבטחה מתיישבת, ואז ממשיכה עם הערך שנפתר.
async function sum() {
const a = await Promise.resolve(10);
const b = await Promise.resolve(20);
return a + b; // 30
}שווה ערך בסגנון .then (יותר מילולית):
function sum() {
return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}await מפיץ שגיאות
אם ההבטחה נדחתה, await מחזיר את השגיאה. אתה יכול לתפוס את זה עם רגיל
try/catch:
async function read() {
try {
const x = await Promise.reject(new Error('no'));
return x;
} catch (err) {
return 'error: ' + err.message;
}
}
read(); // Promise { 'error: no' }חץ אסינכרון
const double = async (n) => n * 2;
double(5); // Promise { 10 }נסה את זה
הגדר `פונקציית אסינכרון addOne(p)` שמקבלת הבטחה של מספר ומחזירה (כהבטחה) את המספר + 1. השתמש בהמתנה.
הצג רמז
const n = await p; החזר n + 1;
הפתרון זמין לאחר 3 ניסיונות
סקירת התרגיל
הגדר 'sumTwo(pa, pb)' אסינכרון: מקבל שתי הבטחות של מספרים, מחזיר את הסכום שלהם. השתמש בשתי המתנה עוקבות.
הצג רמז
המתן לכל אחד ואז החזר a + b.
הפתרון זמין לאחר 3 ניסיונות