繁体   English   中英

我什么时候应该使用 `publishReplay` 和 `shareReplay`?

[英]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() ,但我确信这里有一个比另一个更正确使用。

题 :

我应该什么时候使用publishReplayshareReplay HTTP 现在和将来的请求有什么区别?

注意为什么没有关于shareReplay的文档?

shareReplay() 基本上是 publishReplay().refCount()

当然不。

shareReplaypublishReplay (+ 在其上调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM