作爲每AngularJS文檔:
的$ HTTP服務是核心角服務便於與遠程HTTP服務器
從$ HTTP調用的響應對象具有這些 通信屬性(除其他外):
數據 - {string | Object} - 使用轉換函數轉換的響應正文。
status - {number} - 響應的HTTP狀態碼。您可以使用它來根據不同代碼制定邏輯
statusText - {string} - 響應的HTTP狀態文本。
在你的例子中,你已經實現了Promise.protorype.then()函數,它允許你委託成功(第一個參數)和錯誤(第二個參數)進行進一步處理,一旦承諾完成($ http。撥打電話已完成)。
這是我將如何根據您的例子做:
function getProducts() {
// Call the http get function
return $http.get(url).then(
//The request succeeded - 200 status code
function(response) {
products= response.data.result;
return products;
},
//The request failed
function(response) {
// Here you can access the status property and the statusText
console.log("Http Status: " + response.status + " Description: " + response.statusText);
// Return a false result
return false;
});
我通常會使用一個庫像Angular-UI-Notification,並清理了一下我實現它是這樣的:
//The success handler function
function handle_response_success(response) {
// Do processing here based on the response then show a success notification
Notification.success('Success notification');
};
// The error handler function
function handle_response_error(error) {
Notification.error('Something went wrong with that request. More Info: ' + 'Http Status: ' + error.status + ' Description: ' + error.statusText);
}
// Then finally bind it to your getProducts call
function getProducts() {
// More elegant proto imho
return $http({ method: 'GET',
url: 'http://example.com'
});
};
// More elegant way to handle this imho
getProducts.then(handle_response_success.bind(this), handle_response_error.bind(this);
http://stackoverflow.com/questions/27507678/in-angular-http-service-how-can-i-catch-the-status-of-error – epascarello
你不應該擔心狀態碼200,如果狀態代碼不是200個代碼中的一個,承諾將被'$ http'拒絕 – charlietfl