gpt4 book ai didi

javascript - Cold observable 和 Replay subject 之间的区别?

转载 作者:数据小太阳 更新时间:2023-10-29 05:54:16 28 4
gpt4 key购买 nike

我可以从文档中看到:

Cold Observables 从一开始就向每个 Observer 发出整个值序列。

ReplaySubject 向任何观察者发送源 Observable 发出的所有项目,无论观察者何时订阅。

那么这两个概念有什么区别呢?

谢谢

最佳答案

一旦 ReplaySubject 订阅了源 observable,源就开始发射,并且 ReplaySubject 成为一个热的 observable。从订阅者的 Angular 来看,订阅 ReplaySubject 可能并不明显,因为它获取了所有先前发出的值。但是 ReplaySubject 只订阅源一次,因此主题能够将这些源值重新发送给后来的订阅者的唯一方法是缓存这些值。

所以不同之处在于,当直接订阅源 observable 时,源会为每个订阅者重新发出值,而使用 ReplaySubject 订阅源时,源只会发出一次,以及该主题的任何订阅者,获取这些缓存值。

考虑以下可观察源

var source = Rx.Observable.create(function(subscriber) {
for (var i = 0; i < 2; i++) {
subscriber.onNext(i);
console.log("onNext: " + i);
}
subscriber.onCompleted();
});

如果我们直接订阅源,我们应该会看到两次日志集

source.subscribe(function(value) {});
source.subscribe(function(value) {});
//onNext: 0
//onNext: 1
//onNext: 0
//onNext: 1

使用 ReplaySubject,一旦它订阅了源,源就开始发射,导致热主题开始发射并缓存值。

var subject = new Rx.ReplaySubject();
source.subscribe(subject);
setTimeout(function() {
console.log('subscribe subject');
subject.subscribe(function(value) { console.log('subscriber')});
subject.subscribe(function(value) { console.log('subscriber')});
}, 100);
//onNext: 0
//onNext: 1
//subscribe subject
//subscriber
//subscriber
//subscriber
//subscriber

在这里,您会看到源在被主题订阅后开始发射。但是对主题的任何订阅都不会导致源重新发送,就像前面的示例一样,每个新订阅者都会导致源重新发送。

关于javascript - Cold observable 和 Replay subject 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36240448/

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