2017-09-23 77 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調用,基於上面提到的解決方案?我想處理每個電話的錯誤。 –

相關問題