請問 Behavior Subject 與 Observable 的差異?

請問 Behavior Subject 與 Observable 的具體差異為何?感覺兩個很像

實務上什麼時候該用 Behavior Subject?什麼時候該用 Observable?

謝謝

1個讚

基本定義

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 與 BehaviorSubject的差異

一般的 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

Recap

service 的角度來說,
Subjectproperty,給使用 service 的人可以訂閱他。Subject 如果沒有手動結束,他會永遠活著
Observablemethod,這大部分的情境,都是使用完後,就會自己關閉了。除非是在處理永不結束的資料流

2個讚

感謝 Kevin 的整裡,現在清出多了

果然還是要畫圖最清楚阿…