如何为所有redux-observable史诗添加全局错误处理程序?

ncu*_*ery 5 react-native redux-observable

我使用redux-observable处理React Native应用程序.我有10+的史诗,所有的结局.catch(err => console.error(err)),以显示本机做出反应"红盒子"(见https://facebook.github.io/react-native/docs/debugging.html#errors)在里面的错误的情况下,史诗.

如何定义一个全局错误处理程序,由所有史诗使用(它们稍后由combineEpics函数组合)?

jay*_*lps 11

redux-observable倾向于RxJS的惯用范例,几乎可以用于你所做的一切.将Epics组合在一起时,您将创建一个具有正常function (action$, store)签名的新Epic .因此,这个新的Epic代表了各个Epics的所有输出,包括错误.

您可以通过定义自己的内容rootEpic并编写combineEpics()调用结果来利用这一事实.由于史诗是工厂,你需要记住传递(action$, store)!

这是一种方式:

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

你可能不应该使用.catch()这个操作符,因为.catch()返回一些其他可观察改为使用,当有错误.如果您只想记录错误(而不是尝试恢复),.do()那么它是理想的操作符 - 它的目的是允许您执行对流本身没有影响的外部副作用(如日志记录).

撰写史诗是非常强大的,不仅仅是在这种情况下,而是我们计划很快描述的许多其他内容.

.catch()运算符相关,您可能还对RFC感兴趣以获得更好的默认错误处理.