他是一个桥梁
A Subject is a sort of bridge or proxy that is available in some implementations of ReactiveX that acts both as an observer and as an Observable.
扮演两种角色
两种行为
- Because it is an observer, it can subscribe to one or more Observables,
- and because it is an Observable, it can pass through the items it observes by reemitting them, and it can also emit new items.
1. AsyncSubject
特色:
-
在被观察者的提交数据完毕的时候,它提交(被观察者提交的)最后一个数据。
若被观察者出现了错误,它直接发射错误。
2.BehaviorSubject
特色:
-
当一个观察者订阅它时,它将会提交给观察者最近的一个发射的数据。
若这个被观察者出现错误时,这时,当一个观察者订阅它时,这个被观察者会发射一个错误给它。
3. PublishSubject
特色:当订阅者订阅后,被观察者发射了什么,就发射给订阅者什么。
4. ReplaySubject
replay 是重播的意思。
特色:
- 只要有订阅者订阅,它就会把被观察者所提交过的所有数据 都发射给订阅者。
- 重播 肯定缓存了数据(可设置缓存的数量,或时间间隔)
注意:
当把它作为被观察者的时候,不要在多个线程中调用 它的onNext。这会引起并发的问题。
5. SerializedSubject
他可以包装 subject,所以当多个线程来访问它的时候,它是安全的。
包装:
mySafeSubject = new SerializedSubject( myUnsafeSubject );