当状态代码大于300时停止$ http.success

时间:2016-10-30 07:37:02

标签: angularjs

在我的应用程序中我使用htto拦截器处理一般的http错误,当它更大或等于400时我得到状态代码,这意味着客户端或服务器端的错误我广播事件并且我在app上有处理程序。运行订阅事件, ,

问题是$ http.success一直在运行,我不能告诉角度停止继续控制器方法

下面是app的简化版本

拦截

angular.module('starter.Aop', [])
    .factory('AuthInspector', ['$rootScope', '$injector', function AuthInspector($rootScope, $injector) {
        var service = {
            request: function (config) {
                var authToken = window.localStorage.getItem('authToken')
                config.headers.Authorization = 'Bearer ' + authToken;
                return config
            },
            responseError: function (response) {

                if (statusCode >= 400) {
                    $rootScope.$emit('someThingWrong')
                    event.preventDefault();
                }

                return response
            }
        };
        return service;
  }]);

app.run

.run(function ($timeout, $ionicPlatform, $rootScope, $state, $cordovaPushV5, $cordovaNetwork, $ionicPopup) {
            $ionicPlatform.ready(function () {
                        $rootScope.$on('someThingWrong', function () {
                            console.log('someThingWrong')
                            event.preventDefault();
                            return;
                        })

控制器

       $scope.logout = function () {
                         $http.post(serverConfig.serverUrl + "/api/account/logoutx").success(function (res) {
                             console.log('methode is successed')
                             //window.localStorage.removeItem('authToken');
                             //window.loclaStorage.removeItem('userFullName');
                         })
                     }

console.log('方法已成功')总是运行

如何从持续的控制器方法中停止角度?

1 个答案:

答案 0 :(得分:2)

AuthInspector 转换拒绝成功。

要正确链接拒绝来自响应错误处理程序,请使用throw语句或return $q.reject(error)

angular.module('starter.Aop', [])
    .factory('AuthInspector', function AuthInspector($q,$rootScope) {
        var service = {
            request: function (config) {
                var authToken = window.localStorage.getItem('authToken')
                config.headers.Authorization = 'Bearer ' + authToken;
                return config
            },
            responseError: function onReject(response) {

                if (response.status >= 400) {
                    $rootScope.$emit('someThingWrong')
                    //event.preventDefault();
                }

                //return response;
                throw response;
                //OR
                //return $q.reject(response);
            }
        };
        return service;
  });

将拒绝处理程序的响应转换拒绝成功。

另一个常见问题是拒绝处理程序忽略任何throwreturn语句。在这种情况下,处理程序将undefined返回给$q服务;拒绝转换成功,后续成功处理程序以undefined作为响应参数进行调用。