アプリケーションの1つをAngular 5にアップグレードし、rxjs v5.5で導入されたlettable operatorsへの移行を開始しました。lettable rxjs演算子の結合パイプでのキャッチエラー
このため、観測可能パイプラインを.pipe()
演算子を持つ新しい構文に書き直しました。
私たちの前のコードは、.catch()
が.switchMap()
の中にあり、エラーがスローされた場合にエフェクトの実行を中断しないようにしています。 dataService
への呼び出しでスローされたエラーの場合は
@Effect()
loadData$ = this.actions$
.ofType(LOAD_DATA)
.map((action: LoadData) => action.payload)
.withLatestFrom(this.store.select(getCultureCode))
.switchMap(([payload, cultureCode]) => this.dataService.loadData(payload, cultureCode)
.map(result => {
if (!result) {
return new LoadDataFailed('Could not fetch data!');
} else {
return new LoadDataSuccessful(result);
}
})
.catch((err, caught) => {
return Observable.empty();
});
);
それがキャッチされ処理(ここでエラー処理を簡素化)されるだろう。 .pipe()
の新しい構文と使用して
、我々は今、この
@Effect()
loadData$ = this.actions$
.ofType(LOAD_DATA)
.pipe(
map((action: LoadData) => action.payload),
withLatestFrom(this.store.select(getCultureCode)),
switchMap(([payload, cultureCode]) => this.dataService.loadData(payload, cultureCode)),
map(result => {
if (!result) {
return new LoadDataFailed('Could not fetch data!');
} else {
return new LoadDataSuccessful(result);
}
})
);
は、どのように私は、同様の方法で新しい構文を使用して、観察可能なパイプライン内の任意のスローエラーをキャッチすることができますか?
ので、任意のエラーは、外側ストリームを閉じます。次のようなものがあります: 'switchMap(([payload、cultureCode])=> this.dataService.loadData(payload、cultureCode).pipe(map ...、catch ...))' –
素晴らしい作品@arturgrzesiak!それを回答として投稿し、私はそれを受け入れるでしょう! :) –