首页 文章

拦截Angular $ http中的服务器错误并拒绝承诺

提问于
浏览
0

我正在使用Angular HTTP服务并拦截来自服务器的响应以捕获任何服务器错误并在拒绝承诺之前对它们执行一些操作(日志记录等) .

顺便说一下,即使状态代码是200,我有时会在响应正文中返回验证错误等内容 . 我知道这不是理想的但请不要因为它不是我的问题的原因而挂断 . 我想我会提到它,因为它解释了我为什么拦截响应和responseError

$httpProvider.interceptors.push(function($log, $rootScope, $q) {

    return {
        response: function(response) {

            if (response.data && response.data.success === false) {
                doSomeStuff(response);
                return $q.reject(response);
            }
            else{
                return response;
            }

        },
        responseError: function(rejection) {
            doSomeStuff(rejection);
            $q.reject(rejection);
        }

    };

});

然后,我的应用程序中的典型HTTP调用可能如下所示 .

$http.post('https://domain.com/api/whatever', data).then(function (response) {
    console.log("Don't do this when an error is returned")
});

不幸的是,即使存在HTTP错误,也会运行console.log,或者存在嵌入错误的200状态 .

我敢肯定,我只是误解了$ http / $ q在这里是如何工作的,而且有人能够让我直截了当 .

1 回答

  • 1
    $q.reject(rejection);
    

    返回一个新的被拒绝的承诺,它不会影响现有承诺的状态 . 事实上, responseError 在这里所做的就是捕获拒绝并返回 undefined 响应 .

    它应该是

    responseError: function(rejection) {
            doSomeStuff(rejection);
            return $q.reject(rejection);
        }
    

相关问题