2016-09-14 18 views
4

我使用redux-observable在React Native應用程序上工作。我有10多部史詩,全部以.catch(err => console.error(err))結尾,以便在史詩內部出現錯誤的情況下顯示React Native「Red box」(請參閱​​https://facebook.github.io/react-native/docs/debugging.html#errors)。如何爲所有可重複觀察的史詩添加全局錯誤處理程序?

我怎樣才能定義一個全局錯誤處理程序,而不是由所有史詩(它們後來由combineEpics函數合併)使用?

回答

10

redux-observable傾向於RxJS的習慣範例幾乎所有你會做的事情。當您將Epics結合在一起時,您將創建一個具有正常function (action$, store)簽名的新Epic。所以這個新的Epic代表了那些單獨的Epics的所有輸出,包括錯誤。

您可以通過定義自己的rootEpic並撰寫您的combineEpics()調用的結果來利用該事實。由於Epics是工廠,所以您需要記住傳遞(action$, store)

這裏有一種方法:

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

你可能不應該使用.catch()運營商這一點,因爲.catch()返回一些其他可觀察改爲使用,當有錯誤。如果你只是想記錄錯誤(而不是嘗試恢復),.do()是理想的操作符 - 它的目的是允許你做外部副作用(如日誌記錄),這些副作用對流本身沒有影響。

撰寫史詩是非常強大的,不僅在這種情況下,而且很多其他人,我們打算很快描述。您可能也有興趣the RFC for better default error handling

+1

感謝您的回覆和其他提示。你的解決方案就像一個魅力。 – ncuillery

相關問題