redux-observable 无法从发出的动作中捕获错误,错误会停止动作流
Posted
技术标签:
【中文标题】redux-observable 无法从发出的动作中捕获错误,错误会停止动作流【英文标题】:redux-observable can't catch error from emitted action, error stops action stream 【发布时间】:2019-04-09 09:30:15 【问题描述】:如果一个 js 错误是由于 redux-observable 史诗中发出的动作而发生的,那么它会阻止所有史诗监听新的动作。这很糟糕,因为在前端它仍然看起来好像应用程序正在运行,但在后台没有保存任何内容。
我尝试在我的史诗中捕获错误,但由于某种原因,它没有捕获由生成的发出操作引起的错误(请参见此处的示例:https://stackblitz.com/edit/redux-observable-playground-qtughj?file=ping-pong.js)
我认为升级到版本 1.0.0 redux-observable 可以解决这个问题,但不幸的是它仍然存在。
有什么方法可以捕获由 redux-observable 发出的动作引起的错误?
该问题与this question 不同,因为该错误是在reducer 中触发的,该reducer 是在史诗发出其输出redux 操作之后发生的,因此在可观察链中用.error
捕获它不起作用(请参阅@ 987654323@ 进行演示)。
谢谢!
【问题讨论】:
【参考方案1】:在redux-observable Github repo 中讨论了这个问题之后,最安全的解决方案似乎是创建一些自定义 Redux 中间件来阻止错误一直冒泡到根史诗,例如
const store = createStore(rootReducer,
applyMiddleware(epicMiddleware, store => next => action =>
try
next(action);
catch (e)
setTimeout(() =>
throw e;
);
)
);
【讨论】:
以上是关于redux-observable 无法从发出的动作中捕获错误,错误会停止动作流的主要内容,如果未能解决你的问题,请参考以下文章
如何从 typesafe redux-observable epic 中收听“@@router/LOCATION_CHANGE”动作
Redux-observable:当动作完成时组件如何订阅响应?
如何在ngrx/effect(redux-observable)中调度多个动作?
在 redux-observable 中,我如何控制 reducer 或 epics 是不是首先对动作做出反应?