不同RxJS科目的语义是什么?

Iva*_*nin 18 javascript rxjs rxjs5

该主题的文档很少,很难在那里发现"入口点".

use*_*222 39

语义根据主题的类型而不同.我将它们分为两种:香草(Rx.Subject)和特殊目标(其他三种).由于专业化(例如,完成/重新连接行为),特殊目的主题与香草主题的语义共享一些警告.

Vanilla Rx.Subject语义

  1. 主要特点

    • 主题实现观察者,可观察的界面(和一次性界面,因为他们dispose在他们的原型上有一个处理程序).这意味着,除其他外,他们有:
      • 观察者接口:onNext,onError,onComplete方法
      • 可观察的接口:subscribe方法
    • 你可以将一个主题转换为一个观察者或一个observable,隐藏额外接口的实现(cf. .asObserver(),and .asObservable())如果需要的话
    • 作为一个可观察的主题,你可以订阅几个观察者.然后,该观察者将向其所有观察员广播其数据.在内部,主体维持着一系列观察者.
    • 作为观察者的主体,您可以将其订阅给任何可观察者
    • 构成主体的观察者和观察者是两个不同的实体,如果这是你的用例,你可以独立使用它们.
    • dispose某个主题将取消订阅所有观察者并释放资源.
    • 主题不采用调度程序,而是假设所有序列化和语法正确性由主题的调用者处理.
    • 主体的默认行为是将它们的值同步地发送给观察者,从第一个订阅的观察者开始到最后一个.在大多数情况下,订单无关紧要,在其他情况下也会如此.

我引用了Rxjs合同和语法的一个关键方面:

该语法允许可观察序列将任何数量(0或更多)的onNext消息发送到订阅的观察者实例,可选地随后是单个成功(onCompleted)或失败(onError)消息.

  • 一个vanilla主题(用其创建new Rx.Subject())实现了该语法:当onCompleted被调用一次时,所有后续调用onNext都被忽略.onCompleted对同一观察者的第二次召唤也被忽略了.如果观察者订阅了主题的可观察方,onComplete则会立即调用其回调(http://jsfiddle.net/cLf6Lqsn/1/).

    1. 创建

      • new Rx.Subject()

    返回将其观察者连接到其observable(jsfiddle)的主题.此示例取自官方文档,并描述了如何将主题用作代理.主题订阅了一个来源(观察者一方),并且也被观察者(可观察的一方)收听.对onNext(观察者方)的任何调用都会导致可观察的一方调用onNext每个观察者的相同值.

    • Rx.Subject.create(observer, observable)

    从指定的观察者和observable创建主题.这两者不一定相关.在实现中可以看到一个很好的例子,Rx.Dom.fromWebSocket它返回一个用于从套接字发送和接收数据的主题.主体的观察者侧将数据发送到套接字.可观察侧用于侦听来自套接字的传入数据.此外,以这种方式创建的主题没有dispose方法.

专门的Rx.Subject语义

  • reactivex.io文档很好地涵盖了专业主题的大部分语义.
  • 其他有趣的观点提到关注过去完成的行为.
  • 示例行为的示例代码用于异步,行为,重放

希望我没有太多错误.我很乐意得到纠正.最后请注意,这应该对RxJS v4有效.

有关冷/热可观测量行为的详细解释,可以参考:热和冷可观测量:是否存在"热"和"冷"运算符?

  • 这是一个很好的答案.它属于在这里RxJS文档:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/subjects.md你可以做PR有增加吗?@ user3743222 (3认同)