RxJS的共享运营商在完成时表现不同?

时间:2018-03-29 16:37:12

标签: javascript rxjs

我正在努力解决一些我无法理解为什么会发生的事情。

看看这个例子:

 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观察是否正确以及为什么两个例子之间有不同的结果?

1 个答案:

答案 0 :(得分:2)

您的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>
&#13;
&#13;
&#13;