我已经知道了
publish
共享一个订阅,并返回ConnectableObservable
(因此我们必须Connect()
)
Share()
是publish().refcount()
Replay
后缀非常明显,它会返回最后一次发射。
让我们以一个Angular http请求为例,其中包含当前和将来的订阅:
<p>{{ (person | async)?.id }}</p> //present markup
<p *ngIf=”show”>{{ (person | async)?.userId }}</p> //future markup
如果我不想要多个http
请求,我可以使用:
publishReplay().Connect()
但我也可以使用:shareReplay()
,但我确信这里有一个比另一个更正确。
问题:
我应该何时使用publishReplay
vs shareReplay
?那个Http礼物与现在的区别是什么?未来的要求?
<子> NB
为什么没有关于shareReplay
的文档?
子>
答案 0 :(得分:10)
shareReplay()基本上是publishReplay()。refCount()
绝对不是。
shareReplay
和publishReplay
(在其上调用connect
)都会使后面的可观察对象变热。
但是它们之间的非常重要的区别是:
shareReplay
:完成之前不会停止发送,无论是否不再有订阅。publishReplay
:如果最后一个订阅者与refCount
一起使用,则将终止
这是至关重要的信息。
答案 1 :(得分:9)
publishReplay
允许您控制订阅何时开始。 shareReplay
将在第一次订阅时自动启动。
通常,如果要在模板(html文件)中使用observable,请使用shareReplay
。您赢得的优势是不必担心取消订阅等。
答案 2 :(得分:2)
shareReplay()
基本上是publishReplay().refCount()
这是一篇很棒的文章,详细解释了:"Angular Async Pipes - Beware the share"
编辑:
正确的话是:
shareReplay()
类似于与publishReplay().refCount()
有关更多信息,请参见@DevRok's answer,为什么它们并不完全相同。