הדמיית הבטחות
תפרוץ דרך...
כדי להמחיש כיצד 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"));
דוגמה #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"));
דוגמה #3/4
3 הבטחות רצות בו-זמנית.
delay(1000).then(console.log);delay(2000).then(console.log);delay(3000).then(console.log);
דוגמה #4/4
Promise.all עם 3 הבטחות delay. הן ירוצו במקביל.
Promise.all([delay(1000), delay(2000), delay(3000)]).then(console.log);
קרדיטים:
- דיאגרמות אסינכרוניות מונפשות מאת Patrick Biffle
- השראה למאמר זה: https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html