2016-09-14 11 views
4

私はredux-observableを使用してReact Nativeアプリで作業しています。叙事詩の中でエラーが発生した場合、React Nativeの "Red box"(https://facebook.github.io/react-native/docs/debugging.html#errorsを参照)を表示するために、私は10 + epicsを持っており、すべてが.catch(err => console.error(err))で終わっています。すべてのredux-observable epicsにグローバルエラーハンドラを追加するには?

どのようにしてグローバルエラーハンドラを定義することができますか(すべて後でcombineEpics関数で結合されます)。

答えて

10

redux-observableは、あなたがやることのほとんどすべてのためにRxJSのイディオムのパラダイムに傾きます。 Epicsを組み合わせると、通常のfunction (action$, store)の署名を持つ新しいEpicが作成されます。したがって、この新しいEpicは、エラーを含め、個々のEpicsからのすべての出力を表します。

あなた自身のrootEpicを定義し、combineEpics()コールの結果を構成することで、そのことを活用できます。 Epicsは工場なので、(action$, store)に合格することを忘れないでください!

は、ここに1つの方法です:

export const rootEpic = (action$, store) => 
    combineEpics(epic1, epic2, epic3)(action$, store) // <-- call epic w/ args 
    .do({ error: err => console.error(err) }); 

.catch()にエラーがあった場合、代わりに使用する他のいくつかの観測を返すためのものですので、あなたはおそらく、このため.catch()演算子を使用しないでください。エラーをログに記録するだけでリカバリしようとしない場合は、.do()が理想的な演算子です。その目的は、ストリーム自体に影響を与えない外部の副作用(ログなど)を可能にすることです。

エピソードの作成は、この場合だけでなく、すぐに説明する予定の他にも非常に強力です。

.catch()に関連すると、あなたも興味があるかもしれませんthe RFC for better default error handling

+1

お返事ありがとうございました。あなたのソリューションは魅力的に機能します。 – ncuillery

関連する問題