私は、httpリクエストをAngular5でキャッシュするために、publishReplay(1).refCount()を使用しています。これは正常に動作します - エラーの場合を除きます。rxjs publishReplay:リセット時にリセット
私は飲み込んで、http-sourceから例外を報告しています。そのため、以下のコードでObservable.of(undefined)を渡しています。その場合、キャッシュは未定義ですが、サブスクライバはその値を取得すべきではありません。代わりに、キャッシュが存在しないようにhttpリソースに対して再度要求する必要があります。
私の現在のコード:https://stackblitz.com/edit/angular-s5zuqa:
result: Observable<any>;
list() {
if (this.result === undefined) {
this.result = this.http.get(`https://swapi.co/api/people`)
.catch(error => {
console.error("Something really bad happened", error);
return Observable.of(undefined);
// in that case, reset publishReplay
})
.publishReplay(1)
.refCount();
}
return this.result;
}
私は挙動を示すために(shareReplayと、同じ問題)stackblitzを持っています。 「ロード」をクリックすると、キャッチからキャッシュされたオブジェクトを提供するのではなく、http-sourceを再要求する必要があります。
»それはまたpublishReplay'は、それらのホールドを取得する '前に、エラー応答はあなたがすべてのエラーをキャッチし、離れてマッピングされている«キャッシュします。それが実現するどんな誤りの振る舞いでも、そのソースには観察可能なエラーが存在しないので、決して重要ではありません。 –
»次回は«次回は*とは何ですか?次の定期購入ですか?これを参照するべきかどうか?私の意見では、質問は不明です。 –
あなたは正しいです。私は私の質問を明確にしようとし、スタックブリッツを提供した。あなたが推測したように、私は以前にエラーが発生した場合、httpリソースを再要求するようにサブスクライバに依頼します。 – Daniel