gpt4 book ai didi

javascript - RxJS 的共享运算符在完成时表现不同?

转载 作者:行者123 更新时间:2023-11-30 14:41:38 25 4
gpt4 key购买 nike

我正在为一些我不明白为什么会发生的事情而苦苦挣扎。

看这个例子:

 const source = Rx.Observable.of(1).share();

source.subscribe(console.log); //1
source.subscribe(console.log); //1

这会打印两次“1”。 AFAIK share 查看 refCount。但是如果我们看一下 - refcount 在这里应该为零:

const source = Rx.Observable.of(1).share();

source.subscribe(console.log);
^-- 1)refCount=1
2)value emitted - closing subscription ( complete)
3)refCount=0

source.subscribe(console.log);
^-- does refCount is 1 again or is it Zero ?

DEMO 1

此外 - 当观察者未完成

时,事情会变得更加复杂
const source = Rx.Observable.create((o)=>o.next(1)).share();

source.subscribe(console.log); //1
source.subscribe(console.log); //nothing

^这只会产生一个值

Demo2

问题

我的 refCount 观察是否正确,为什么两个示例之间的结果不同?

最佳答案

您的 refCount 观察是正确的。

在共享 Observable 上,如果(且仅当)refCount 重置为 0,那么任何新订阅都会重新创建源 Observable。

演示 1:refCount 在每次订阅后重置

演示 2:refCount 永远不会重置,因为订阅不会完成。

第三个例子:

const source = Rx.Observable.create((o)=>o.next(1)).share();

source.take(1).subscribe(console.log); //1
source.take(1).subscribe(console.log); //1
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.8/Rx.js"></script>

关于javascript - RxJS 的共享运算符在完成时表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49561125/

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