[英]When should I use `publishReplay` vs `shareReplay`?
我已经知道了
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
和shareReplay
? HTTP 现在和将来的请求有什么区别?
注意为什么没有关于shareReplay
的文档?
shareReplay() 基本上是 publishReplay().refCount()
当然不。
shareReplay
和publishReplay
(+ 在其上调用connect
)都会使背后的 observable 变得炙手可热。
但它们之间非常重要的区别是:
shareReplay
:在完成之前不会停止发射,无论是否不再有订阅。publishReplay
: 如果与refCount
一起使用,将在最后一个订阅者取消订阅后停止恕我直言,这是一个关键信息。
publishReplay
允许您控制订阅何时开始。 shareReplay
将在第一次订阅时自动启动。
通常,如果要在模板(html 文件)中使用可观察对象,请使用shareReplay
。 优点是您不必担心取消订阅等。
shareReplay()
基本上是publishReplay().refCount()
这是一篇很棒的文章,详细解释了这一点: “Angular Async Pipes - Beware the share”
编辑:
正确的说法是:
shareReplay()
类似于publishReplay().refCount()
有关为什么它们不完全相同的更多信息,请参阅@DevRok 的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.