2016-01-29 47 views
0

在我的應用程序中,我有一個通過HTTP承諾獲取數據的網格。目前,我可以檢測errorCallback秒 - 如下:如何檢測所有http GET失敗?

myDataPromise.then(function() { 
    //do stuff 
}, function errorCallback(response) { 
     if (response.statusText === "Not Found") { 
      //do stuff 
     }else if(response.statusText === "Internal Server Error"){ 
      //do stuff 
     } 

,但說了SSL錯誤,其中鉻火災回「ERR ::連接被拒絕:」我不能在此拿起通過讀取字符串,我可以與404的等等。真正我想要的是顯示一個簡單的圖像/文本,說明檢索一個人的數據時發生錯誤,無論它是什麼。所以如果一個http GET失敗根本就是 - 用戶知道。這在我看來就像一個相當典型的規格,但我無法在網上找到關於它的很多信息。

+1

你可以使用攔截器檢查每個http請求:) –

回答

3

你必須創建一個interceptor

// register the interceptor as a service 
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { 
    return { 
    // optional method 
    'request': function(config) { 
     // do something on success 
     return config; 
    }, 

    // optional method 
    'requestError': function(rejection) { 
     // do something on error 
     if (canRecover(rejection)) { 
     return responseOrNewPromise 
     } 
     return $q.reject(rejection); 
    }, 



    // optional method 
    'response': function(response) { 
     // do something on success 
     return response; 
    }, 

    // optional method 
    'responseError': function(rejection) { 
     // do something on error 
     if (canRecover(rejection)) { 
     return responseOrNewPromise 
     } 
     return $q.reject(rejection); 
    } 
    }; 
}); 

$httpProvider.interceptors.push('myHttpInterceptor'); 


// alternatively, register the interceptor via an anonymous factory 
$httpProvider.interceptors.push(function($q, dependency1, dependency2) { 
    return { 
    'request': function(config) { 
     // same as above 
    }, 

    'response': function(response) { 
     // same as above 
    } 
    }; 
}); 

攔截器攔截所有$ http流量。即使你正在加載模板。

+0

這將被稱爲?我無法看到這將如何適應我的應用按鈕功能(它在服務中執行「GET」功能,並返回單個或一組承諾)。如果這是有道理的?我會在哪裏調用這些函數? – xeon48

+1

您只需將此攔截器添加到您的應用程序中即可。每個http請求和響應都會通過這個攔截器。如果您收到響應錯誤,攔截器將執行「responseError」函數。你可以通過發佈一個事件來處理這個事件,以便你可以在別的地方處理它。 – com2ghz

+0

是啊,它的工作,哇,這是一個驚人的功能!謝謝你的幫助! – xeon48