我试图添加一个弹出式重试选项,如下所示,以便用户可以在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” –