我从某个时候开始使用RxJS,我似乎不明白为什么我们将RxJS Subject
称为Multicast
,而将Observable
称为Unicast
。
我知道Subject
可以使用next()
发射数据,并且像普通的Observable一样,我们也可以订阅它们。
我是从RxJS官方网站上找到的
A Subject is like an Observable, but can multicast to many Observers.
这是否意味着像一个普通的Observable不能有多个Observer?
答案 0 :(得分:0)
考虑以下代码:
const myObservable = new Observable<number>(subscriber => {
const rdn = Math.floor(Math.random() * 200) + 1;
subscriber.next(rdn);
});
myObservable
.subscribe(a => console.log('Subscription A', a));
myObservable
.subscribe(a => console.log('Subscription B', a));
// Result:
// Subscription A 137
// Subscription B 8
Observable是单播的,因为每个观察者都有自己的数据生产者实例。另一方面,如果每个观察者都从同一生产者接收到通知,则可以观察到多播,如下所示:
const rdn = Math.floor(Math.random() * 200) + 1;
const myObservable = new Observable<number>(subscriber => {
subscriber.next(rdn);
});
myObservable
.subscribe(a => console.log('Subscription A', a));
myObservable
.subscribe(a => console.log('Subscription B', a));
// Result:
// Subscription A 149
// Subscription B 149
最后一个代码段未考虑错误和补全之类的处理方法。
由于this,该主题是多播的:
在主题内部,订阅不会调用新的执行 提供价值。它只是将给定的Observer注册在列表中 的观察者,类似于addListener通常在其他观察者中的工作方式 图书馆和语言。
花点时间阅读this。