2017-12-17 16 views
0

나는 AngularJS와의 GET 및 POST 요청을 처리하는 서비스를 만든 그러나 문제는 내 컨트롤러에 있습니다HTTP 서비스 캐치 오류 각도 JS

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 
     }; 

문제가 결코 어떤 도움을 크게

+0

http://blog.ninja-squad.com/2015/05/28/angularjs-promises/을 읽으십시오. –

답변

1

당신이 할 일은 당신의 로그인 방법에

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

이 방법을 약속 돌려 주어를 appreacited됩니다 컨트롤러에 오류를 반환 는 handleError 기능에 중 방법 이것을 호출하면 ".then"을 사용할 수 있다는 약속이 반환됩니다.

편집 : 실제로 당신이 약속의 요점을 놓치고있는 것처럼 보입니다.

위와 같이 메서드를 정의한 다음 일부 컨트롤러에서는 약속 한 것처럼 호출 할 수 있습니다.

$scope.login = function() { 

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

}; 

이것의 장점은 지금 LoginService에서 데이터를 조작하는 데 필요한 사전 처리의 모든 종류의 작업을 수행 할 수 있습니다 다음 방금 너무 오래 당신이 주입으로 어떤 컨트롤러의 약속과 같다 호출 할 수 있다는 것입니다 로그인 서비스.