2017-09-06 32 views
1

我正在寫一個Angular 1.5.3應用程序。在我的主'主頁'頁面控制器上,我使用$ http調用2個不同的端點。這兩個端點彼此不相關,並且具有單獨的數據等。我遇到的一個問題是,如果這兩個端點都有錯誤,那麼我的用戶將看到2個錯誤消息。信息可能相同也可能不相同(例如,有時沒有互聯網連接)。AngualrJS - 如何管理多個http錯誤消息的可用性?

FirstService.request() 
    .then(handleFSSuccess) 
    .catch(handleError); 

SecondService.request() 
.then(handleSSSuccess) 
.catch(handleError) 

    function handleError(error) { 
     ErrorService.showErrorBanner(error); 
    } 

我不能使用$ q.all功能或承諾鏈接,因爲即使第一承諾失敗我想第二個繼續。

我不知道如何管理運行所有承諾,無論他們是否全部失敗,只顯示一個錯誤橫幅。如果我只顯示一個錯誤橫幅,則其他錯誤消息可能不會顯示(防止顯示多個錯誤橫幅)。

如果只顯示一個,則可用性會更好。

+0

使用像'hasErrorShown'自定義布爾標誌,並只有'showErrorBanner'如果該標誌設置爲false。 –

+1

在您的showErrorBanner()函數中,您可以首先檢查橫幅是否顯示/存在,然後處理它,但不要實例化兩個橫幅,只創建一個並顯示/隱藏它,或者檢查是否存在,標誌或檢查DOM – Ferus7

回答

1

FirstService.request()SecondService.request()都返回Promise,並且您用then/catch解決。

我會用新的Promise包裝它,即使發生故障也能解決它們。例如:

var deferred = $q.defer(); 

FirstService.request().then(function(_response){ 
    deferred.resolve(_response.data); 
}).catch(function(error){ 
    deferred.resolve({error:error}); // here we do not reject but pass error to resolve 
}); 

return deferred.promise; 

所以,現在你可以使用$q.all,你將只能得到解決數據,或對象或錯誤對象。

在一個地方,你可以通過過濾誤差關鍵數據(因爲你[RES1,RES2])


希望這將有助於你