【发布时间】:2019-01-04 00:31:10
【问题描述】:
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
});
}
所以,我可能想多了,但我正在尝试找出最佳实践。当我的异步操作出现错误时,即使我正在调度错误,仍然感觉抛出它是正确的,因此如果某些组件想要对此进行键控,则该承诺会被拒绝。但是,这意味着为了在未处理的 promise 拒绝时不使用 Create-React-App 炸弹,我需要在调度操作时添加这个虚拟捕获,恕我直言,这有点难看。
这里的最佳做法是什么?不抛出错误?使用假捕捉?还有什么?
编辑:我需要 dummy catch 的原因是因为否则应用程序正在轰炸我,至少在 create-react-app 中:
(错误不是 100% 匹配我的伪代码,但你明白了)
【问题讨论】:
-
我会派出并扔掉。就像你说的,其他功能可以依赖它来解决。空的catch很尴尬,你为什么还需要它?所以错误没有显示在控制台中?
-
@JohanP 没有空的 catch create-react-app 炸弹(显示错误页面)。如果它只是默默地显示在控制台中,我会很好的。
-
啊,我明白了。在你的函数中遇到错误时调度,为什么在
handleSubmitClick出现错误时不必调度? -
@JohanP 我不确定我是否理解这个问题。我发送了一个 saveSomething 操作,这将发送一个错误,reducer 将使用该错误来更改状态。所以,在这种情况下,我对失败的承诺处理程序没有用处。但是,解决它似乎有点不对。
-
为什么您的
.catch(e=>中不需要dispatch({ type: THING_SAVE_ERROR, error: e, });?
标签: javascript redux es6-promise redux-thunk