[英]What is the best practice for handling async action errors in redux?
export const saveSomething = (thing = {}) => {
dispatch({
type: THING_SAVING,
});
return async function (dispatch) {
try {
await persistThing(thing);
} catch (e) {
dispatch({
type: THING_SAVE_ERROR,
error: e,
});
throw e;
}
dispatch({
type: THING_SAVED,
error: e,
});
}
}
handleSubmitClick(e) {
dispatch(saveSomething({ name: e.target.value }))
.catch(e => {
// pass
});
}
因此,我可能对此有过多的思考,但是我正在尝试找出最佳实践。 当我的异步操作发生错误时,即使我正在调度一个错误,也仍然可以将其抛出,因此如果某些组件想要在其上键入内容,则诺言将被拒绝。 但是,这意味着为了避免在未处理的诺言拒绝中出现Create-React-App炸弹,我需要在分派操作时添加此虚拟捕获,恕我直言,这很丑陋。
这里的最佳做法是什么? 不会抛出错误? 使用假人? 还有吗
编辑:我需要虚拟捕获的原因是因为否则应用程序在我身上轰炸,至少在create-react-app中:
(错误并非100%与我的伪代码匹配,但您明白了)
在我自己的项目中,我将尝试管理所有错误应用程序,可能使用一些可以用适当的错误代码修改的通用动作分派器。 但就您的示例而言,您可能不想将错误抛出,因为在可能导致错误的方法中使用了await
。 所以我将这样重写代码:
export const saveSomething = (thing = {}) => {
dispatch({
type: THING_SAVING,
});
return async function (dispatch) {
try {
await persistThing(thing);
dispatch({
type: THING_SAVED,
});
} catch (e) {
dispatch({
type: THING_SAVE_ERROR,
error: e,
});
}
}
}
如果什么也没发生,并且一切顺利,那么异步调用persistThing
完成后,动作分派器将被执行。 并且如果persistThing
生成异常,则将执行错误操作分派器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.