`share()`和`publish()。refCount()`之间的区别

时间:2015-06-07 17:11:29

标签: javascript rxjs

observable.publish().refCount()observable.share()之间的实际区别是什么?什么是我们不想使用share的情景示例?

2 个答案:

答案 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(),如果基础观察者完成了 并且稍后添加了新订户,观察者实际上开始了 新执行并开始发送数据。