2017-12-13 20 views
3

開始するには高価なので、いくつかの無限ストリームを読み込む必要があります。そして同じ理由で彼らが始まったら、私は彼らを止めたくない。購読していない共有オペレータ

share演算子があった場合、下位の加入者がすべて退会していても、最初に購読された後に下位のストリームから退会しなかったと思っています。

今私は、公開2つの異なるラインに接続し、大丈夫働くとそれをやっているが、同じように非常にrxjs不格好思わない:私はそれが最後に再生したい

また
public data$(): Observable<any> { 
    if (this.lazyData$) { 
     return this.lazyData$; 
    } 

    this.lazyData$ = this.someDataProvider.data$() 
    .publishReplay(1); 

    this.lazyData$.connect(); 

    return this.lazyData$; 
} 

表示されているように新しいユーザにメッセージを送信してください:

+1

現在の 'shareReplay'の実装は、あなたが行っている動作に影響します。ソースが完了したときにのみ/を購読解除します。 https://github.com/ReactiveX/rxjs/pull/2910を参照してください – cartant

+0

私たちは行く、ありがとうございました:)そして、リンクもありがとう。私はrxjs 5.5.5に更新しなければならなかったが、そうでなければちょうどうまくいった。あなたは答えとしてそれを入れなければならないので、私はそれを受け入れられた答えとしてマークすることができます。 – Sammi

答えて

2

shareReplayオペレータがRxJS version 5.4.0に追加されました。そして、version 5.5.0bug was fixedにあるので、加入者数がゼロになったときにその履歴を維持します。

shareReplayは、ソースが完了したときまたはエラーが発生したときにのみソースからの登録を解除するため、探している動作に影響します。共有オブザーバブルのサブスクライバの数がゼロになると、共有オブザーバブルはソースにサブスクライブされたままになります。

関連する問題