2017-09-23 72 views
1

有时回丹啾啾处理在异步错误反应终极版应用

“我畏缩,当我看到

`.then(() => dispatch(...)).catch(...)` 
在阵营项目

。如果一个组件调度过程中抛出,你会陷入陷阱。”

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

有人可以解释为什么这种情况。

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

回答

3

那么什么丹的意思是,在一个Async要求,你会期望导致.then()成功呼叫被调用,因为你是在.then()dispatching an action这反过来将更新Redux的商店,因此用户界面,因此,如果有在UI更新过程中的任何错误,.catch()也将被调用,而你希望它在服务器返回错误

的解决办法是处理它像

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

}) 
+0

因此就只能被称为它就像那里不应该有任何捕获和相反,总是尝试使用上面的方法,因为在API调用成功响应后的大多数情况下,我们最终将通过调度来设置某些状态,这将反过来呈现UI。对于那些不在内部展示的情况,这种解决方案是否可行? –

+0

它肯定是,但是当你更新UI的形式.then()回调 –

+0

肯定是首选,我怎么能编码的情况下,我有一个API调用,只有我想调用另一个API调用,其成功的另一个API调用,基于上面提到的解决方案?我想处理每个电话的错误。 –

相关问题