Subjects既是订阅者Observer,也是可观察序列Observable。
一共有四种 Subjects,分别为:
PublishSubjectBehaviorSubjectReplaySubjectVariable
Subject常用的几个方法:
-
onNext(:):是on(.next(:))的简便写法。该方法相当于 subject 接收到一个.next 事件。 -
onError(:):是on(.error(:))的简便写法。 -
onCompleted():是on(.completed)的简便写法。
四种Subject的相同之处:
- 首先他们都是
Observable,他们的订阅者都能收到他们发出的新的 Event。 - 直到
Subject发出.complete或者.error 的 Event后,该Subject便终结了,同时它也就不会再发出.next事件。 - 对于那些在
Subject终结后再订阅他的订阅者,也能收到subject发出的一条.complete或.error的event,告诉这个新的订阅者它已经终结了。 - 他们之间最大的区别只是在于:当一个新的订阅者刚订阅它的时候,能不能收到
Subject以前发出过的旧Event,如果能的话又能收到多少个。
四种Subject的不同点:
-
PublishSubject
它不需要初始值就能创建。
PublishSubject的订阅者从他们开始订阅的时间点起,可以收到订阅后Subject发出的新Event,而不会收到他们在订阅前已发出的Event。 -
BehaviorSubject
BehaviorSubject需要通过一个默认初始值来创建。
当一个订阅者来订阅它的时候,这个订阅者会立即收到BehaviorSubjects上一个发出的event。之后就跟正常的情况一样,它也会接收到BehaviorSubject之后发出的新的event。 -
ReplaySubject
ReplaySubject在创建时候需要设置一个bufferSize,表示它对于它发送过的event的缓存个数。
如果一个subscriber订阅已经结束的ReplaySubject,除了会收到缓存的.next的event外,还会收到那个终结的.error或者.complete的event。 -
Variable其实就是对BehaviorSubject的封装












网友评论