【问题标题】:RxJs: What is the difference between Subjects and Observable-MulticastingRxJs:Subjects 和 Observable-Multicasting 有什么区别
【发布时间】:2019-02-28 06:45:16
【问题描述】:
我已经学习 RxJs 几个星期了,我似乎无法理解 Subjects 和 Multicasting an observable 之间到底有什么区别。
我发现了许多将 observables 与 subject 区分开来的资源,但我找不到任何能将 Subjects 与 Multicasting-Observables 区分开来的资源
据我了解...
多播:允许在多个订阅者之间共享副作用。
Subjects:是一个 Observable,它在
观察者。
我的问题是:
- 如果两者都做同样的事情有什么区别?
- 什么时候应该使用主题?
- 什么时候应该使用多播?
【问题讨论】:
标签:
rxjs
reactive-programming
【解决方案1】:
基本上,“多播”是指在多个观察者之间共享一个订阅源Observable。在 RxJS 中,这总是通过内部使用 Subject 实例的 multicast() 运算符来完成。
Subjects 是同时作为Observable 和观察者工作的对象。因此,通常您会使用Subjects 随时发出自定义事件:
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 订阅和 3 个s 订阅(观察者),因此您将来自source 的发射多播到 3 个观察者。