Http服务捕获错误角js

问题描述 投票:1回答:1

我已经在angularJS中创建了一个处理get和post请求的服务,但问题是在我的控制器中我无法捕获错误回调但成功回调工作正常:

app.js

 AuthenticationService.Login(function (_data) {
    $rootScope.showPreloader = false;
    console.log(_data)//works fine when call is succes


    },function (error){
      console.log(error)//not executed when error is thrown  
    });

authentication.service.js

 function Login(callback) {
        $http({
            method: "GET",
            url: "/auth/getRoles",
            headers: {
                "Accept-Language": "en-US, en;q=0.8",
                "Content-Type": "application/json;charset=UTF-8"
            }
        }).then(function (_response) {
            return _response.data;

            var serverData = response.data;

            callback(serverData);//getting respone is controller when succes    

        }, _handleError);
    };

 function _handleError(_error) {

        console.log(_error)//console prints on error
        return _error//controller never recevies the return statement
         };

问题出在handleError函数中,它永远不会将错误返回给控制器,任何帮助都将大大适用

angularjs angularjs-service angularjs-http
1个回答
2
投票

您所要做的就是在Login方法中返回promise

function Login(callback) {
    return $http(...success / error callback);
};

这种方式调用此方法返回一个可以使用“.then”的承诺。

编辑:看起来你真的错过了这里的承诺点。

您可以像上面一样定义方法,然后在某个控制器中调用它,就好像它是一个promise。

$scope.login = function() {

    LoginService.Login()
      .then(function(response){
        $scope.loginData = response
      }, function(err) {
      //Error handling...
      });

};

这样做的好处是,您现在可以进行任何必要的预处理来操作LoginService中的数据,然后只要您注入登录服务,就可以在任何控制器中调用它作为承诺。

© www.soinside.com 2019 - 2024. All rights reserved.