2017-02-15 31 views
0

我有一個angularjs服務,利用restangular進行調用。爲什麼我geting 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()方法,我得到類型錯誤:的onSuccess不是函數 這是怎麼我打電話吧。

console.log(userSvc.getAuthenticatedUser()); 

我做錯了什麼。我正在使用角度1.6

回答

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回調實際上也是如此,所以你也需要提供第二個參數)

因此,要麼在getAuthenticatedUser函數中執行這樣的檢查(例如onSuccess && onSuccess()),要麼提供回調函數(即使這是一個匿名的,對任何事都沒有),以防止這個錯誤。

userSvc.getAuthenticatedUser(function() {}, function() {}); 
相關問題