【问题标题】:Http service catch error angular jsHttp服务捕获错误角度js
【发布时间】:2018-05-31 00:14:48
【问题描述】:

我在 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】:

你所要做的就是在你的登录方法中返回承诺

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

这样,无论哪个方法调用它都会返回一个可以使用“.then”的承诺。

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

你像上面那样定义方法,然后在一些控制器中你可以调用它,就好像它是一个承诺一样。

$scope.login = function() {

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

};

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

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多