我正在为无法理解的原因苦苦挣扎。

看这个例子:

 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:每次订阅后引用计数重置

演示2:由于订阅不会完成,因此引用计数永远不会重置。

第三个例子:



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>

07-24 09:44