יום שני, 3 בדצמבר 2018

rxjs

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

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

ניתן ליצור Observable באמצעות Observable.create וניתן גם באמצעות operators כגון:
from - אופרטור שמקבל מערך ומחזיר Observable שמוציא את ערכי המערך אחד אחרי השני. ניתן גם לספק לאופרטור אובייקט promise והוא יהפוך אותו ל Observable. ניתן גם לספק מחרוזת ונקבל Observable שמחזיר כל תו בנפרד.

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

timer - מוציא ערכים 0,1,2,3 וכו' בקצב קבוע כאשר הערך הראשון יוצא אחרי המתנה מסוימת. הפונקציה מקבלת שני פרמטרים של זמן ב ms . הפרמטר הראשון מגדיר לאחר כמה זמן להתחיל להוציא ערכים והשני מגדיר כל כמה זמן יצאו הערכים בהמשך. 

כדי להפעיל את ה Observable נדרש להרשם אליו באמצעות subscribe. לכל נרשם (observer) מורץ עותק נפרד של observable. למרות שהשם עשוי להטעות, לא מדובר ברישום כגון pub/sub. קיימת אופציה כזו שנקראת subject ונדון בה בהמשך.

בעת הרישום ל observable יש לספק (לא חובה) שלוש פונקציות. אחת לכל ערך אפשרי שחוזר מ observable. הפונקציה הראשונה תופעל כאשר observable מחזיר ערך באמצעות next. הפונקציה השנייה תופעל כאשר observable מחזיר ערך של שגיאה. הפוקנציה השלישית תוחזר כאשר ה observable מסיים את תפקידו על ידי פקודת complete.

כאשר ה Observer מעונין להפסיק להאזין ל Observable הוא מבצע פעולת unsubscribe.

בבניית ה Observable ניתן לשלב פעולות נוספות בין ה output של ה Observable למידע שמתקבל ב Observer. פעולות אלו נקראות operators ומאפשרות למשל לעקוב אחר כל תשובה (על ידי פעולת scan), להגביל החזרה של ערכים לקצב מסוים על ידי throttleTime, השהיית התשובה על ידי delay, להחזיר רק ערכים ייחודיים על ידי distinct וכו'. 

Subject הוא סוג של Observable שמאפשר הפצה של מידע למספר observers. בניגוד ל Observable רגיל, רישום ל subject אינו מייצר מופע חדש של ה Observable אלא הצטרפות למופע קיים. ה subject מנהל פנימית את רשימת ה observers שמאזינים לו.

אין תגובות:

הוסף רשומת תגובה