处理 react redux 应用程序中的异步错误

IT技术 javascript reactjs promise redux
2021-05-14 03:19:12

有一次丹在twitter上说

“当我看到时我会畏缩

`.then(() => dispatch(...)).catch(...)` 

在 React 项目中。如果一个组件在分发过程中抛出异常,你就会陷入困境。”

并说解决方案如此简单。只是不要呈现 UI 的 then()之后链接 catch() 而是将错误处理程序作为第二个参数传递给 then()。

有人可以解释为什么会这样。

在我的情况下,我正在进行 ajax 调用,所以我假设我将进入然后将任何 200 作为服务器响应并在内部捕获任何不是 200 的内容,即来自服务器的错误。我在这里错过了什么吗?

1个回答

所以 Dan 的意思是,在Async请求中,您会期望成功调用导致.then()被调用,并且由于您dispatching an action.then()其中将更新 redux 存储并因此更新 UI,因此如果 UI 更新中出现任何错误process,.catch()也将被调用,而您希望它仅在服务器返回错误时调用

解决方案是像这样处理它

.then(
function (){
    //handle success
    dispatch({...})
},
function () {
    //handle reject() and Error for Async request

})