請問 Behavior Subject 與 Observable 的具體差異為何?感覺兩個很像
實務上什麼時候該用 Behavior Subject?什麼時候該用 Observable?
謝謝
請問 Behavior Subject 與 Observable 的具體差異為何?感覺兩個很像
實務上什麼時候該用 Behavior Subject?什麼時候該用 Observable?
謝謝
Observable
是這樣子定義的
Observables are lazy Push collections of multiple values.
Subject 是這樣子描述的
Every Subject is an Observable. Given a Subject, you can subscribe to it, providing an Observer, which will start receiving values normally. From the perspective of the Observer, it cannot tell whether the Observable execution is coming from a plain unicast Observable or a Subject.
Internally to the Subject, subscribe does not invoke a new execution that delivers values. It simply registers the given Observer in a list of Observers, similarly to how addListener usually works in other libraries and languages.
用到 Subject
的情境是,你想要 手動推送資料 給訂閱者。
一般的 Subject
,當訂閱者在初次訂閱時,無法得知該 Subject 最後一次所發生的資料是什麼,訂閱者只能知道未來發生資料。
Subject A,每秒更新資料一次
---1---2---3---4---5---6
第一個訂閱者訂閱時在第3.5秒時訂閱
---------------4---5---6
而 Behavior Subject
只是 Subject
類別的其中一種。他可以設定初始值,而每一個 Subscriber
在初次訂閱時,即可取得最後一次所發生的值。
BehaviorSubjects are useful for representing “values over time”. For instance, an event stream of birthdays is a Subject, but the stream of a person’s age would be a BehaviorSubject.
BehaviorSubject B,每秒更新資料一次
----1----2----3----4----5----6
第一個訂閱者訂閱時在第3.5秒時訂閱
----------------3--4----5----6
就 service
的角度來說,
Subject
是 property
,給使用 service
的人可以訂閱他。Subject 如果沒有手動結束,他會永遠活著
Observable
是 method
,這大部分的情境,都是使用完後,就會自己關閉了。除非是在處理永不結束的資料流
感謝 Kevin 的整裡,現在清出多了
果然還是要畫圖最清楚阿…