2017-12-17 5 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内のデータを操作するために必要な前処理のいずれかの種類を行うことができ、その後、あなただけの長い間、あなたが注入として任意のコントローラで約束通りです呼び出すことができるということですログインサービス。