gpt4 book ai didi

angular - 为什么我们称 RxJS Subject 为 Multicast 而 Observable 为 Unicast?

转载 作者:行者123 更新时间:2023-12-03 21:18:50 25 4
gpt4 key购买 nike

我从某个时候开始使用 RxJS,我似乎无法理解为什么我们将 RxJS Subject 称为 Multicast ,将 Observable 称为 Unicast

我知道 Subject 能够使用 next() 发出数据,就像普通的 Observable 一样,我们也可以订阅它们。

我从 RxJS 官方网站上找到了这个

A Subject is like an Observable, but can multicast to many Observers. 

这是否意味着一个普通的 Observable 不能有多个观察者?

最佳答案

考虑这个代码:

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 是单播的,因为每个观察者都有自己的数据生产者实例。另一方面,如果每个观察者都收到来自同一个生产者的通知,则 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
最后一个代码片段没有考虑一些处理,比如错误和完成。
由于 thisSubject 是多播的:

Internally to the Subject, subscribe does not invoke a new executionthat delivers values. It simply registers the given Observer in a listof Observers, similarly to how addListener usually works in otherlibraries and languages.


花一些时间阅读 this

关于angular - 为什么我们称 RxJS Subject 为 Multicast 而 Observable 为 Unicast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57020646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com