PracticU

הסבר על Observables - חלק 1

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › הסבר על Observables - חלק 1
מילון מושגים:
Promise - אובייקט ב-JavaScript שמייצג תוצאה עתידית של פעולה אסינכרונית, שתושלם בהצלחה או תיכשל.
ספרייה - אוסף קוד מוכן, כמו פונקציות ומחלקות, שמפתחים משתמשים בו בתוכניותיהם במקום לכתוב הכול מחדש.
Node.js - סביבת ריצה שמאפשרת להריץ קוד JavaScript מחוץ לדפדפן, בעיקר בצד השרת.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.

הסבר על Observables - חלק 1
Observable הוא מנגנון לדיווח של רצף נתונים לאורך זמן, בניגוד ל-Promise שמסתיים עם תוצאה אחת. השיעור מסביר את ההבדל, מראה איך בונים Observable, ומציג את שלושת סוגי הדיווחים שלו.
למה לא Promise
1. Promise: מדווח תוצאה אחת בלבד, והוא מסתיים מיד, בהצלחה או בכישלון.
2. Observable: מתאים לנתונים שמגיעים לאורך זמן, למשל שינויי מניה או שערי מטבע כל דקה.
בניית Observable
1. התקנה: הספרייה rxjs לא מגיעה עם Node.js, ולכן מתקינים אותה.
2. יצירה: קוראים ל-create של הקלאס Observable, ומעבירים לו פונקציה שמקבלת אובייקט מתבונן (observer).
3. דיווח: next שולח ערך, error מדווח שגיאה, ו-complete מסמן שהרצף הסתיים.
4. הפעלה: Observable לא פועל עד שקוראים ל-subscribe. הפונקציה שמועברת ל-subscribe מקבלת את הערכים.
ביטול
1. unsubscribe: מחזיר אובייקט שבעזרתו אפשר לעצור את ה-Observable לפני שסיים. לפי השיעור, אחרי ביטול לא מתקבלים עוד דיווחים, גם לא שגיאה או סיום.
שימו לב
1. הפעלה: Promise מתחיל לפעול מיד כשנוצר, ואילו Observable מתחיל רק בהרשמה. אפשר להמיר Observable ל-Promise כשצריך רק תוצאה אחת.
עכשיו אפשר לבנות Observable, להירשם אליו ולבטל את ההרשמה.
השיעור הבא בקורס: הסבר על Observables - חלק 2

פרקי ההרצאה: הסבר על Observables - חלק 1

  1. 00:00

    פרומיס לעומת דיווח לאורך זמן

  2. 00:38

    דוגמאות לנתונים שמגיעים לאורך זמן

  3. 01:16

    פרומיס מסתיים אחרי הדיווח הראשון

  4. 02:34

    מודול שמדווח מספרים רנדומליים

  5. 04:35

    יצירת Observable עם Observable.create

  6. 05:11

    דיווח ערכים בעזרת next

  7. 07:14

    הרשמה לדיווחים עם subscribe

  8. 08:40

    עצירת הדיווחים אחרי כמות מסוימת

תמלול ההרצאה: הסבר על Observables - חלק 1

הטקסט המלא של הדקות הראשונות בהרצאה «הסבר על Observables - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    כאשר רצינו לבנות פונקציה אסינכרונית שמחזירה לנו איזשהו נתון, אז אנחנו השתמשנו לצורך כך בפרומיס, זה בעצם היה השיטה הנכונה לבצע את זה.

  2. 00:15

    הפונקציה מחזירה פרומיס, הפרומיס ברגע שהוא מסתיים מדווח לנו הצלחה או כישלון. אבל מה קורה אם אנחנו רוצים פונקציה שמדווחת לנו סדרה של נתונים, אבל לא בבת אחת על ידי איזשהו מערך, וזאת הנקודה החשובה, לאורך זמן.

  3. 00:36

    לדוגמה, אנחנו רוצים לקבל רצף של מניות לאורך זמן. כלומר, מעכשיו בשעה הקרובה כל שינוי שיש במניה תדווח לי את השינוי.

  4. 00:49

    או לדוגמה, שערי מטבעות, נניח בחצי שעה הקרובה בוא תדווח לי כל דקה כמה בעצם ערך מטבע מסוים. או רצף נתונים של משחקים, יש עוד המון דוגמאות שבהן אנחנו רוצים בעצם פונקציה שלא מדווחת פעם אחת מידע אלא מדווחת שוב ושוב ושוב לאורך זמן.

  5. 01:12

    לצורך כך אנחנו לא משתמשים בפרומיס מפני שפרומיס ברגע שהוא מבצע ריזולב הוא מסתיים הוא לא יכול לדווח כמה פעמים ריזולב. בריזולב הראשון שאתם מבצעים פרומיס אבוד מת לא יכול יותר לדווח ריזולב אפילו שתנסו בעצמכם כמה פעמים לבצע ריזולב ריזולב ריזולב להמון נתונים לאורך זמן.

  6. 01:37

    גם אם הפרומס מדווח ריג'קט, כמובן שהוא מסתיים. אנחנו לצורך כך משתמשים במשהו שנקרא Observable. Observable זה בעצם המנגנון שקיים היום בעולם מבחינת דיווחים לאורך זמן.

  7. 01:56

    המנגנון הפופולרי שמשתמשים איתו בהמון מקומות. דבר ראשון אנחנו צריכים להתקין ספרייה, Observable הזה כרגע לא בא בילד אין עם Node.js, בואו נבצע התקנה והספרייה נקראת rx.js.

  8. 02:11

    בואו נתקין את זה ואנחנו יכולים עכשיו להשתמש ב-Obserable. לצורך כך בואו נבנה לנו איזשהו מודול נפרד כי הולך להיות לנו פה קצת קוד ובואו נניח שאנחנו רוצים במודול הזה לדווח כרגע הכי פשוט בעולם מספרים.

  9. 02:30

    אז ניקח איזשהו מודול נקרא לו random numbers מספרים רנדומליים בואו נבנה פה איזושהי פונקציה random numbers ונניח אפילו ניקח כאן count כמה בעצם היוזר רוצה כמה סליחה המשתמש לא המשתמש המתכנת שמשתמש בפונקציה רוצה שנדווח לו מספרים רנדומליים אבל לאורך זמן אנחנו לא מדווחים לו אותם בבת אחת עם איזשהו מערך

  10. 03:04

    אלא כל פרק זמן מסוים נותנים לו מספר אחד. אז דבר ראשון, אנחנו רוצים להתחיל לדווח את המספרים. אז לצורך כך אנחנו נצטרך לפתוח set interval, וב-set interval בכל שנייה נניח נדווח איזשהו מספר.

  11. 03:25

    אבל אנחנו צריכים לפני זה to return את ה-observable. שנייה אחת, נגדיר כאן למעלה את ריק ווייר, סליחה, Observable שווה ריק ווייר למעשה rxjs זאת הספרייה בתוכה יש לנו Observable.

  12. 03:56

    אנחנו יכולים לעשות את זה בצורה כזאת או שאנחנו יכולים לבצע את זה בצורה קצת אחרת. אם אנחנו שמים פה מסולסלים, אז הוא מוציא לנו את זה לפה אז אפשר להוציא את זה ואז הוא יחפש את ה-Observable ויביא אותו לכאן זה עוד טכניקה שאפשר להשתמש בה בואו נשים פה ריטרן ונבנה לנו Observable.

  13. 04:25

    Observable אנחנו לא בונים על ידי New אנחנו בונים על ידי Observable.create זה סליחה או גדולה כי זה קלאס Observable.create יוצר לנו Observable.

  14. 04:41

    עכשיו בתוך ה-Observable אנחנו נותנים לו פונקציה בדיוק כמו שנתנו בפרומיס אבל הפונקציה לא מקבלת ריזולב וריג'קט מפני שריזולב הוא אחד ויחיד.

  15. 04:56

    הפונקציה מקבלת אובייקט. נהוג לקרוא לאובייקט הזה אובזרבר כלומר הוא זה שמתבונן ומדווח לנו את הדיווחים ובגלל שהוא אובייקט אחד הורדתי את הסוגריים העגולים.

  16. 05:11

    עכשיו בואו ניקח כאן set interval ול-set אינטרוון נבנה פונקציה שמופעלת כל שנייה. אנחנו רוצים בתוך הפונקציה הזאת להתחיל לדווח. דרך האובזרבר אנחנו מדווחים.

  17. 05:35

    איך אנחנו מדווחים? קוראים לפונקציה שנקראת next ונותנים לה את הערך שאנחנו רוצים לדווח. אז בואו נבנה לעצמנו פה const num שווה math.flor ו-math.random כפול 100. הנה יש לנו כאן מספר רנדומלי בין 0 ל-100 כולל 0 לא כולל 100 אבל זה לא כזה משנה ואנחנו מדווחים אותו.

  18. 06:03

    אז קודם כל ברגע שעשינו את זה אז יש לנו פה דיווחים בלי הפסקה עדיין לא השתמשנו עם ה-count הזה תכף נשתמש איתו. בואו נחשוף החוצה מודול xports@random numbers ונשים את זה פה בצד ונשתמש איתו מה-JS.

  19. 06:36

    אז ב-App.js מה שאנחנו רוצים לעשות זה קודם כל להגדיר קונסט, Random Numbers, רק ווייר, יש לנו פה את המודול Random Numbers.

  20. 06:52

    עכשיו אנחנו פונים ל-Random Numbers, זאת פונקציה שבנינו, כרגע ניתן לה, בעצם האמת אני לא משתמש בזה אז אני אוריד אותו, תכף אני אוסיף אותו.

  21. 07:04

    קראתי לפונקציה ומה שהוחזר לי מהפונקציה זה אובייקט של Observable אז אם הוחזר לי Observable אנחנו יכולים כבר ללחוץ נקודה ול-Observable יש פונקציה שנקראת סאבסקרייב סאבסקרייב זאת פונקציה שמאפשרת להתחיל את התהליך אם אני לא קראתי לסאבסקרייב אז המערכת לא באמת תתחיל את האובזרבבל

  22. 07:38

    סאבסקרייב נרשמת להתחיל לקבל את הדיווחים. כל דיווח בנקסט על ידי נקסט יפעיל את הפונקציה של הסאבסקרייב. פונקציה של הסאבסקרייב מקבלת בתוכה פונקציה בצורה כזאת.

  23. 08:01

    ועכשיו מה אנחנו רוצים לעשות? בואו נניח רק להציג קונסול לוג, רק להציג את המספר על המסך. בואו נבדוק את זה, יש לנו כאן node-app.go ואנחנו רואים שאנחנו מתחילים לקבל דיווחים בלי הפסקה.

  24. 08:23

    כלומר, המערכת הזאת ממשיכה לנצח. בואו נעצור אותו. קונטרול סי עוצר. חוזרים וממשיכים. עכשיו, אנחנו רוצים לשלוח כאן איזשהו מספר, בואו נניח 10, ולחזור לפה, לקבל קאונט, ולדווח רק עשרה מספרים.

  25. 08:48

    זה בעצם מראה שאנחנו לא מדווחים לנצח. איך אנחנו יכולים לעשות את זה? ראשית בואו כל פעם שאנחנו נכנסים לתוך ה-set interval, לתוך הפונקציה ב-set interval ודיווחנו מספר count מינוס מינוס

לקורס המלא: קורס NodeJS אונליין בעברית

ההרצאה הקודמת: הדגמה של תכנות אסינכרוני עם async

ההרצאה הבאה: הסבר על Observables - חלק 2

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React