$http错误回调不能与 httpProvider responseInterceptor 结合使用
$http error callback does not work in combination with httpProvider responseInterceptor
我在应用程序中添加了一个"加载屏幕"。正如这篇文章中发现的:"点击"
现在我遇到了一个问题,所有$http请求都会导致"成功"回调。即使 url 不存在。
$http.post("this doesnt even exist", { })
.success(function (data, status, headers, config) {
alert("success"); //this callback is called
})
.error(function (data, status, headers, config) {
alert("error"); //never called
});
当我禁用"响应拦截器"时,一切正常。(异常,未找到,参数错误 -> 都会导致错误回调)
我正在使用 .NET Web 服务从中获取数据。
成功回调中的参数值
data: ''
status: 0
headers: 'function(name) { ... }'
config: JSON.stringify(config) '{"method":"POST","url":"this doesnt even exist","data":{}}'
这是因为您链接到的响应拦截器"吞噬"了错误。
在下面的代码中:
return promise.then(hide, hide);
第一个hide
用于成功回调,而第二个用于错误回调。
在所有情况下,hide
函数本身都以 return r;
结尾,这意味着它将返回响应。
为了让您的$http.post
知道存在错误,响应拦截器需要将承诺返回为拒绝:return $q.reject(reason);
沿着这些思路的东西应该有望工作或至少提供进一步的指导(请注意,我无法对其进行测试):
$httpProvider.responseInterceptors.push(function ($q) {
return function (promise) {
numLoadings++;
loadingScreen.show();
var hide = function () {
if (!(--numLoadings)) loadingScreen.hide();
};
var success = function (response) {
hide();
return response;
};
var error = function (reason) {
hide();
return $q.reject(reason);
};
return promise.then(success, error);
};
});
相关文章:
- 没有找到相关文章