RxJs:Subject和Observable-Multicasting的区别是什么?

3

我已经学习RxJs几周了,但我似乎无法理解Subject和多播observable之间的区别。

我找到了许多区分observable和subject的来源,但我找不到任何区分subject和多播observable的来源。

据我理解...

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

Subjects:是一个Observable,它在观察者之间共享单个执行路径。

我的问题是:

  • 如果两者都执行相同的操作,有什么区别吗?
  • 何时应该使用Subject?
  • 何时应该使用多播?
1个回答

4
基本上,“多播”意味着在多个观察者之间共享对一个源 Observable 的订阅。在 RxJS 中,这总是通过使用 multicast() 操作符来完成的,它内部使用 Subject 实例来实现。
Subject 是一种同时作为 Observable 和 Observer 的对象。因此,通常情况下,您将使用 Subject 在需要时发出自定义事件:
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 个观察者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接