天天看點

Rxjs 裡 Subject 和 BehaviorSubject 的差別

通過一個實際的例子來了解。

下面的代碼,建立了一個新的 subject,然後調用 next 方法,多點傳播給其所有的監聽者。

Rxjs 裡 Subject 和 BehaviorSubject 的差別
Rxjs 裡 Subject 和 BehaviorSubject 的差別

如果 Subject 在被訂閱之前就開始多點傳播(即下圖第5行的 111),那麼這些多點傳播值,不會被開始多點傳播之後的訂閱者收到。如下圖所示:訂閱者隻會列印其訂閱 subject 之後收到的多點傳播值 222:

Rxjs 裡 Subject 和 BehaviorSubject 的差別

使用 BehaviorSubject,就可以避免這個問題:即使訂閱者訂閱該 subject 之前,後者就開始調用 next 進行多點傳播,這些多點傳播值同樣能夠被訂閱者接收到:

Rxjs 裡 Subject 和 BehaviorSubject 的差別

繼續閱讀