Subjects
既是订阅者Observer
,也是可观察序列Observable
。
一共有四种 Subjects
,分别为:
PublishSubject
BehaviorSubject
ReplaySubject
Variable
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
发出的新Even
t,而不会收到他们在订阅前已发出的Event
。BehaviorSubject
BehaviorSubject
需要通过一个默认初始值来创建。
当一个订阅者来订阅它的时候,这个订阅者会立即收到BehaviorSubjects
上一个发出的event
。之后就跟正常的情况一样,它也会接收到BehaviorSubject
之后发出的新的event
。ReplaySubject
ReplaySubject
在创建时候需要设置一个bufferSize
,表示它对于它发送过的event
的缓存个数。
如果一个subscriber
订阅已经结束的ReplaySubject
,除了会收到缓存的.next
的event
外,还会收到那个终结的.error
或者.complete
的event
。Variable
其实就是对BehaviorSubject
的封装