Angular HTTP Interceptor没有命中错误函数

时间:2016-08-06 15:57:29

标签: javascript angularjs http express

所以我直接从角度HTTP文档中删除了拦截器,但这仍然无效。 "请求"和#34;回应"函数被调用,但从来没有" requestError"或者#34; responseError"。

myApp.config(['$httpProvider', function ($httpProvider) {
        $httpProvider.interceptors.push(function ($q) {
            return {
                'request': function (config) {
                    return config; //gets called
                },

                'requestError': function (rejection) {
                    return $q.reject(rejection); //Never gets called
                },

                'response': function (response) {
                    return response; //gets called
                },

                'responseError': function (rejection) {
                    return $q.reject(rejection); //Never gets called
                }
            };
        });
    }]);

在服务器上我返回400,但实际上任何错误都会发生。这是服务

User.publicProfileGetProfile = function (value, type) {
    return $http({
        url: '/public/profile/' + type + '/' + value,
        method: 'GET'
    }).then(function (response) {
        return response;
    }, function(error){
        return error;
    });
};

没有调用错误函数,每个响应都通过响应函数。与往常一样,标准角度误差与错误请求(400)一起显示。当返回400错误时,它只是“未定义”'通过“回复”#39;拦截器中的功能。

如果我忘记包含任何重要信息,请告诉我。

2 个答案:

答案 0 :(得分:0)

通过使用return,错误处理程序将转换拒绝成功。而是使用throw来排除拒绝。

User.publicProfileGetProfile = function (value, type) {
    return $http({
        url: '/public/profile/' + type + '/' + value,
        method: 'GET'
    }).then(function onSuccess(response) {
        return response;
    }, function onReject(error){
        //return converts rejection to success
        //return error;

        //use throw to chain rejection
        throw error;
    });
};

答案 1 :(得分:0)

当我看到JSFiddle(来自@georgeawg)工作正常时,我确保我看起来完全一样。当它没有工作时,我环顾四周,看看是否有其他可能导致问题的拦截器。我有另一个拦截器,它首先被击中并返回任何错误作为响应,然后他们将通过这个,它将处理它作为一个成功的响应。我把它删除了,现在一切似乎都正常了!