簡體   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