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

Ser*_*lla 8 javascript rxjs

什么是之间的实际差别observable.publish().refCount()observable.share().什么是我们不想使用的场景的例子share

pau*_*els 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));
Run Code Online (Sandbox Code Playgroud)

只有第一个订阅者才会收到任何值,如果我们想要收到它们,我们会使用:

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();
Run Code Online (Sandbox Code Playgroud)

  • 对于rxjs 5,运算符的两个用法之间存在差异.请参阅[本期](https://github.com/ReactiveX/RxJS/issues/1363)我发布到rxjs 5 repo,详细解释了这些差异 (6认同)

Teo*_*ahi 5

根据文章“ Rxjs Observable 发布引用计数与共享”;

使用observable.publish().refCount(),一旦观察者完成,如果完成后添加新订阅者,它将不会重新启动。而对于 observable.share(),如果底层观察者完成并稍后添加新订阅者,则观察者有效地开始 新的执行并开始发送数据。