Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript `share()`和`publish().refCount()之间的差异`_Typescript_Rxjs_Observable - Fatal编程技术网

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,它现在的行为与答案不同: