$http错误回调不能与 httpProvider responseInterceptor 结合使用

$http error callback does not work in combination with httpProvider responseInterceptor

本文关键字:responseInterceptor 结合 httpProvider http 错误 回调 不能      更新时间:2023-09-26

我在应用程序中添加了一个"加载屏幕"。正如这篇文章中发现的:"点击"

现在我遇到了一个问题,所有$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);
        };
    });
相关文章:
  • 没有找到相关文章