observable.publish().refCount()
和observable.share()
之间的实际区别是什么?什么是我们不想使用share
的情景示例?
答案 0 :(得分:12)
没有实际的区别,如果你看'observable.prototype.share',你会发现它只是返回'source.publish()。refCount()'。
至于你为什么要使用它,更多的是你的源开始广播需要多少控制权的问题。
由于refCount()
将在第一次订阅时附加基础observable,因此后续观察者很可能会错过在订阅之前进入的消息。
例如:
var source = Rx.Observable.range(0, 5).share();
var sub1 = source.subscribe(x => console.log("Observer 1: " + x));
var sub2 = source.subscribe(x => console.log("Observer 2: " + x));
只有第一个订阅者才会收到任何值,如果我们想要收到它们,我们会使用:
var source = Rx.Observable.range(0, 5).publish();
var sub1 = source.subscribe(x => console.log("Observer 1: " + x));
var sub2 = source.subscribe(x => console.log("Observer 2: " + x));
source.connect();
答案 1 :(得分:3)
根据文章“ Rxjs Observable publish refcount vs share”;
使用observable.publish()。refCount(),观察者完成后, 完成后添加新订户将不会重新启动。 而使用observable.share(),如果基础观察者完成了 并且稍后添加了新订户,观察者实际上开始了 新执行并开始发送数据。