RxJs:主题和可观察多播之间有什么区别

时间:2019-02-28 06:45:16

标签: rxjs reactive-programming

我已经学习RxJ几周了,我似乎无法理解“主题”和“多播”之间的区别到底是什么。

我找到了许多将可观察到的事物与主题区分开来的资料,但是我找不到任何可以将多播与可观察的事物区分开来的资料

据我了解...

  

多播:允许在多个订户之间共享副作用。

     

主题:是一个Observable,在其中共享一条执行路径   观察者。

我的问题是...

  • 如果两者都做同一件事,有什么区别?
  • 什么时候应该使用主题?
  • 什么时候应该使用多播?

谢谢..

1 个答案:

答案 0 :(得分:1)

基本上,“多播”是指在多个观察者之间共享对一个可观察源的订阅。在RxJS中,这总是通过内部使用Subject实例的multicast()运算符完成的。

Subject是同时充当Observable和Observer的对象。因此,通常情况下,您会在需要时使用主题发出自定义事件:

const s = new Subject();
s.next();
s.complete();

...但是您可以使用它来订阅另一个Observable,然后多次订阅此Subject,这与多播相同:

const s = new Subject();
const source = ... // Observable
source.subscribe(s);

s.subscribe(...);
s.subscribe(...);
s.subscribe(...);

因此,source只有一个订阅,s只有3个订阅(观察者),因此您正在将source的发射多播到3个观察者中。