什么是之间的实际差别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 Observable 发布引用计数与共享”;
使用observable.publish().refCount(),一旦观察者完成,如果完成后添加新订阅者,它将不会重新启动。而对于 observable.share(),如果底层观察者完成并稍后添加新订阅者,则观察者有效地开始 新的执行并开始发送数据。