该主题的文档稀少,很难在那里发现“入口点”。
答案 0 :(得分:39)
语义因主题类型而异。我将它们分为两种:香草(Rx.Subject
)和特殊目标(其他三种)。由于专业化(例如,完成/重新连接行为),特殊目的主题与香草主题的语义共享部分注意事项(例如,完成/重新连接行为)。
Vanilla Rx.Subject语义
主要功能
dispose
处理程序。这意味着,除其他外,他们有:
onNext
,onError
,onComplete
方法subscribe
方法.asObserver()
和.asObservable()
),如果需要的话dispose
主题将unsubscribe all observers and release resources. 我引用Rxjs contract and grammar的一个关键方面:
此语法允许可观察序列将任何数量(0或更多)的onNext消息发送到订阅的观察者实例,可选地后跟一个成功(onCompleted)或失败(onError)消息。
一个vanilla主题(使用new Rx.Subject()
创建)实现了该语法:当onCompleted
被调用一次后,对onNext
的所有后续调用都将被忽略。 onCompleted
对同一观察者的第二次调用也被忽略。如果观察者订阅了主题的可观察方,则会立即调用其onComplete
回调(http://jsfiddle.net/cLf6Lqsn/1/)。
创建
new Rx.Subject()
返回将其观察者连接到其可观察对象(jsfiddle)的主题。此示例取自官方documentation,并描述了如何将主题用作代理。主题订阅了一个来源(观察者一方),并且也被观察者(可观察的一方)收听。对onNext
(观察者方)的任何调用都会导致可观察方调用onNext
,并为每个观察者提供相同的值。
Rx.Subject.create(observer, observable)
从指定的观察者和observable创建一个主题。这两者不一定相关。在Rx.Dom.fromWebSocket
的实现中可以看到一个很好的例子,它返回一个用于从套接字发送和接收数据的主题。主体的观察者侧将数据发送到套接字。可观察侧用于侦听来自套接字的传入数据。此外,以这种方式创建的主题没有dispose
方法。
专门的Rx.Subject语义
reactivex.io
documentation涵盖了专业科目的大部分语义。希望我没有太多错误。我很乐意得到纠正。最后请注意,这应该对RxJS v4有效。
有关冷/热可观测量行为的详细说明,可以参考:Hot and Cold observables : are there 'hot' and 'cold' operators?