Typescript `share()`和`publish().refCount()之间的差异`
Typescript `share()`和`publish().refCount()之间的差异`,typescript,rxjs,observable,Typescript,Rxjs,Observable,observable.publish().refCount()和observable.share()之间的实际区别是什么。如果我们不想使用share,这个场景的例子会是什么呢?如果您查看“observable.prototype.share”,您会发现它只返回“source.publish().refCount()”,没有实际的区别 至于你为什么要使用它,这更多的是一个问题,当你的源开始广播时,你需要多少控制 由于refCount()将在第一次订阅时附加基础的observable,因此很可能是后
observable.publish().refCount()
和observable.share()
之间的实际区别是什么。如果我们不想使用share
,这个场景的例子会是什么呢?如果您查看“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();
根据第“”条
使用observable.publish().refCount(),一旦观察者完成,它将
如果完成后添加了新订户,则不会重新启动。
而对于observable.share(),如果基础观察者完成
然后添加一个新的订阅者,观察者有效地开始了一次
新执行并开始发送数据
是一个.Net标记。对于rxjs 5,运算符的两种用法之间存在差异。请参阅我发布到rxjs 5回购协议的详细说明differences@Christian我目前在Angular2申请中面临一个问题。我有一个http请求的
可观察的,它有多个观察者。我的浏览器的开发者工具记录了大约750个任务请求。当我将share()
更改为publish.refCount()
时,同一任务只剩下50个请求。因此,似乎share()
没有做它应该做的事情(共享可观察的
)。另请参阅此问题以了解差异。share()示例意味着第一个range()结果是同步的,这意味着不可能存在两个订阅都收到一个值的竞争条件?不确定很久以前的情况如何,但看看Stackblitz,它现在的行为与答案不同: