我試圖添加一個彈出式重試選項,如下所示,以便用戶可以在HTTP調用期間失去連接時單擊它。AngularJS攔截器不成功返回
angular.module('app.services', [])
.factory('httpResponseErrorInterceptor', ['$injector', '$q', function($injector, $q) {
return {
'responseError': function(response) {
var $ionicPopup = $injector.get('$ionicPopup');
if (response.status === 0) {
var confirmPopup = $ionicPopup.confirm({
title: 'No Connectivity!',
template: 'Internet not available'
});
confirmPopup.then(function(res) {
if(res) {
var $http = $injector.get('$http');
return $http(response.config);
} else {
return $q.reject(response);
}
});
}
}
};
}])
它正在接收來自http調用的響應,但沒有將響應返回給調用點。以同樣的方式我嘗試下面的代碼,
.factory('httpResponseErrorInterceptor', ['$injector', '$q', function($injector, $q) {
return {
'responseError': function(response) {
if (response.status === 0) {
var $http = $injector.get('$http');
return $http(response.config);
}
return $q.reject(response);
}
};
}])
但是,當我們得到的連接回這個人是正確的返回響應到調用點。我不確定第一個代碼中哪裏出錯。
任何幫助/想法,將不勝感激。
您好,感謝您的解決方案,它的工作原理。只是澄清一下,是不是必須使用'defer'和'resolve'? – Stranger
沒有必要。此退貨僅用於鏈接承諾。一個很好的參考是https://docs.angularjs.org/api/ng/service/$q - 「鏈接承諾」 –
你確定這是可行的嗎?對我來說,它看起來像你返回的確認彈出承諾,而不是http承諾,這將導致傳遞給你的外部回調(調用者之一)的錯誤參數。 它應該通過「res」值而不是「response.config」 –