gpt4 book ai didi

angular - Subject(是 Observable 的特例)和 Observable 之间的区别

转载 作者:行者123 更新时间:2023-12-05 01:13:21 25 4
gpt4 key购买 nike

根据the docs on Subject ,它是 Observable 的一个特例,它让所有的观察者共享一个共同的执行路径。该示例显示每个观察者在订阅源后都会获得相同的发射值。

我不完全清楚它与计划 Observable 发射值的情况有何不同。多个订阅者中的每一个都将收到每个下一个的值。在相应订阅之前发出的值不会传递(除非我们在某些shareReply中显式地管道)。

使 Subject 成为 Observable 的特例的实际区别是什么?我可能错过了显而易见的东西。

最佳答案

根据定义,可观察对象是数据生产者。

另一方面,Subject 可以同时充当数据生产者和数据消费者。

这意味着两件事。

  1. 可以订阅主题,就像 observable 一样。
  2. 主题可以订阅其他可观察对象。

话虽如此,主题和可观察对象之间存在一个关键区别。

All subscribers to a subject share the same execution of the subject. i.e. when a subject produces data, all of its subscribers will receive the same data. This behavior is different from observables, where each subscription causes an independent execution of the observable.

例子:

  // Here a subject is acting like a data producer
const subject = new Subject();
const subjObserv = subject.asObservable();
subjObserv.subscribe((data: number) => console.log("subect A " + data));

for (let i = 1; i <= 5; i++) subject.next(i);

subjObserv.subscribe((data: number) => console.log("subect B " + data));
subject.next(6);


// simple observer
const plainObs = Observable.of([1, 2, 3, 4, 5]);
plainObs.subscribe(data => console.log("plain onservable A " + data));
plainObs.subscribe(data => console.log("plain onservable B " + data));

输出:

subect A 1
subect A 2
subect A 3
subect A 4
subect A 5
subect A 6
subect B 6
plain onservable A 1,2,3,4,5
plain onservable B 1,2,3,4,5

您可以注意到,我们获得的输出次数与订阅 plainObs 的次数一样多,但是对于 subjObserv,我们获得的是订阅后发出的输出。

关于angular - Subject(是 Observable 的特例)和 Observable 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60482722/

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