תרגול הבטחות ב JavaScript

18/07/2019

חושבים שאתם יודעים מה זה Promise, מה עושה async ו await ואיך לשלב את כל זה ב Node.JS? הנה ההזדמנות שלכם להוכיח את זה. מוזמנים לפתור ולשתף את הפיתרונות שלכם בתגובות (או לתרגל בבית בחושך כשמשעמם).

1. עבודה עם Promises

נתונה הפונקציה fetch שמקבלת URL ומחזירה Promise. הצלחה של ה Promise מחזירה אוביקט מסוג Response. אפשר לקרוא על ה API כאן:

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

ב Node.JS אנחנו מתקינים את הספריה באמצעות המודול node-fetch.

  1. התקינו את הספריה וכיתבו תוכנית Node שמושכת את המידע מהכתובת https://swapi.co/api/people/1/ ומדפיסה את שדה name מקובץ ה JSON על המסך תוך שימוש ב then של ה Promise.

  2. חזרו על תרגיל 1 אך הפעם השתמשו ב await כדי לחכות לסיום ההורדה.

  3. הוסיפו לתרגיל קוד טיפול בשגיאות. נסו לשנות את ה URL לכזה שזורק שגיאה ובידקו שקוד טיפול השגיאות שכתבתם עובד.

  4. ב URL מהתרגיל הקודם, כשמחליפים את המספר 1 למספרים אחרים מקבלים קבצי JSON שמתארים דמויות אחרות בסרט "מלחמת הכוכבים". כיתבו תוכנית Node שתמשוך דרך ה API באמצעות fetch את השמות של עשר הדמויות שמספריהן 1 עד 10, באמצעות שימוש ב then.

  5. חיזרו על תרגיל 4 באמצעות שימוש ב await. מה ההבדל בין ההתנהגות של שני המימושים?

2. יצירת Promises

  1. כתבו פונקציית JavaScript שמחזירה Promise. אחרי 3 שניות ה Promise ייפתר ויחזיר לקוד שהשתמש בו מספר אקראי בין 1 ל-10. כתבו קוד שמשתמש בפונקציה שכתבתם כדי לוודא שהיא עובדת. השתמשו ב new Promise כדי ליצור את ה Promise.

  2. חיזרו על תרגיל 6 אבל הפעם השתמשו ב async במקום ב new Promise.

  3. כתבו פונקציה ב Node שמקבלת שם של קובץ ומחזירה הבטחה אשר בסיומה יוחזר מספר השורות בקובץ. אם היתה בעיה בקריאת הקובץ יש להכשיל את ההבטחה. פתרו את התרגיל פעמיים: פעם אחת עם new Promise ופעם שניה עם async.

3. חיבור Promises

  1. כתבו פונקציה המקבלת מספר של דמות ממלחמת הכוכבים, ובאמצעות ה API מאתר swapi.co מושכת את פרטי הדמות ואז את שמות כל הסרטים שאותה דמות שיחקה בהם. על הפונקציה להחזיר Promise שבסיום שלו מקבלים מערך של כל שמות הסרטים.