DanLevy.net

הדמיית הבטחות

תפרוץ דרך...

Hero image for הדמיית הבטחות

כדי להמחיש כיצד Promises מתבצעות, נגדיר מתודה חדשה delay(millisecs).

function delay(millisecs) {
return new Promise(resolve => {
setTimeout(() => resolve(millisecs), millisecs);
});
}

זוהי מתודת עזר שתיפתר לאחר שהטיימאאוט יעבור.

השהייה במילישניות תועבר לקולבק של .then.

בואו נסתכל על 4 דוגמאות (עם צירי זמן מונפשים).

דוגמה #1/4

זה מראה כיצד הביצוע של console.log() יידחה על ידי delay(msec).

delay(1000).then(() => console.log("done"));

ציר זמן המציג השהייה של 1000 ואז ריצת console.log לאחר שנייה אחת

דוגמה #2/4

זה מראה טעות נפוצה.

console.log מופעל מיד כשה-delay(1000) מתחיל. לא אחרי ההשהיה כמו שרצית כנראה.

מכיוון ש-console.log מחזיר undefined, ה-.then() שלנו מתעלם בשקט.

שימו לב להבדל בין typeof console.log === 'function' לבין typeof console.log() === undefined.

באופן כללי, השימוש הרצוי ב-console.log מוצג בדוגמה #1. וודאו שאתם מעבירים פונקציות לתוך .then ו-.catch.

delay(1000).then(console.log("done"));

ציר זמן המציג ריצת console.log מיד לפני סיום ההשהיה

דוגמה #3/4

3 הבטחות רצות בו-זמנית.

delay(1000).then(console.log);
delay(2000).then(console.log);
delay(3000).then(console.log);

ציר זמן המציג שלוש הבטחות delay שנפתרות לאחר אחת, שתיים ושלוש שניות

דוגמה #4/4

Promise.all עם 3 הבטחות delay. הן ירוצו במקביל.

Promise.all([delay(1000), delay(2000), delay(3000)]).then(console.log);

ציר זמן המראה את Promise.all ממתין לכל שלוש הבטחות ההשהיה

קרדיטים: