[英]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.