2017-02-15 7 views
0

私は、角を利用して呼び出しを行うanglejsサービスを持っています。なぜ私は取得しますかTypeError:onSuccessは、私のangularjsサービス内の関数ではありません。

angular.module('app.userSvc', []) 
    .factory('userSvc', ['localStorageService', '$rootScope', 'Restangular', 
     function(localStorageService, $rootScope, Restangular) { 
      function checkIfLoggedIn() { 
       return localStorage.getItem('token'); 
      } 

      function login(email, password, onSuccess, onError) { 
       Restangular.all('api/authenticate') 
        .post({ 
         email: email, 
         password: password 
        }) 
        .then(
         function(response) { 
          localStorage.setItem('token', response.token); 
          onSuccess(response); 
         }, 
         function(response) { 
          onError(response); 
         }); 
      } 

      function logout() { 
       localStorageService.remove('token'); 
      } 

      function getCurrentToken() { 
       return localStorage.getItem('token'); 
      } 

      function getAuthenticatedUser(onSuccess, onError) { 
       Restangular.one('api/authenticated_user?token=' + getCurrentToken()).get().then(function(response) { 
        onSuccess(response.user); 
       }, function(response) { 
        onError(response); 
       }); 
      } 
      Restangular.setDefaultHeaders({ 
       'Authorization': 'Bearer ' + getCurrentToken() 
      }); 
      return { 
       checkIfLoggedIn: checkIfLoggedIn, 
       login: login, 
       logout: logout, 
       getCurrentToken: getCurrentToken, 
       getAuthenticatedUser: getAuthenticatedUser 
      }; 
     } 
    ]); 

しかし、私は、コントローラ内のuserSvc.getAuthenticatedUser()メソッドを呼び出したとき、私はTypeError例外を取得:するonSuccessは、これはそれを呼び出していますどのように機能 ではありません。

console.log(userSvc.getAuthenticatedUser()); 

私は間違っています。私は角度を使用しています

答えて

1

エラーが、期待されている

function getAuthenticatedUser(onSuccess, onError){ 
} 

だから、コールバックメソッド

userSvc.getAuthenticatedUser(function() {}, function() {}) 

それとも、あなたができるに合格する必要があります引数が定義されているかどうかを確認するangular.isFunction

function getAuthenticatedUser(onSuccess, onError) { 
    Restangular.one('api/authenticated_user?token=' + getCurrentToken()).get().then(function (response) { 
     !!onSuccess && angular.isFunction(onSuccess) && onSuccess(response.user); 
    }, function (response) { 
     !!onError && angular.isFunction(onError) && 
     onError(response); 
    }); 
} 
+0

今私はそれを見る。私は自分自身を恥じるべきです!ありがとう。 –

1

getAuthenticatedUser()の内部には、onSuccess引数が設定されているかどうかを確認するチェックがないので、最初の引数としてコールバック関数を設定する必要があります。 (実際はonErrorコールバックにも当てはまりますので、その2番目の引数も指定する必要があります)

したがって、getAuthenticatedUser関数内にこのようなチェック(例:onSuccess && onSuccess())を実装するか、そのエラーを防ぐために何もしない匿名のものです)。あなたのサービスメソッドがコールバックメソッドは、ので、それらを渡す予想通り

userSvc.getAuthenticatedUser(function() {}, function() {}); 
関連する問題