2013-10-11 2 views
0

я получаю следующее сообщение об ошибке: TypeError: Object [объект глобальной] не имеет метод 'setApiToken'Почему я не могу получить доступ к методу внутри службы AngularJS после «затем» обещания? (См код)

angular.module("userService", ["restangular", "angular-cache"]).factory "userService", (Restangular, $angularCacheFactory) -> 

setCurrentUserId: (value) -> 
    # Code here... 

login: (user, callback) -> 
    # FOR TESTING PURPOSES, I DON'T GET AN ERROR HERE 
    @setApiToken(1) 
    Restangular.all("sessions").post(user).then (returnVal) -> 
    returnJson = angular.fromJson(returnVal) 

    if returnJson.success is true 
     # I GET AN ERROR HERE ############################################ 
     @setApiToken(returnJson.data.authToken) 
     returnJson.id 
    else 
     "" 
+2

'' это не то, что вы думаете. Используйте жирную стрелу. – SLaks

ответ

3

@SLaks является правильным. Вам нужна жирная стрелка, чтобы сохранить this в области вашего обратного вызова до then(). Кроме того, вам не нужно разбирать ответ JSON, который должен обрабатываться Restangular.

angular.module("userService", ["restangular", "angular-cache"]).factory "userService", (Restangular, $angularCacheFactory) -> 

setCurrentUserId: (value) -> 
    # Code here... 

login: (user, callback) -> 
    # FOR TESTING PURPOSES, I DON'T GET AN ERROR HERE 
    @setApiToken(1) 
    Restangular.all("sessions").post(user).then (returnVal) => 
    returnJson = angular.fromJson(returnVal) 

    if returnJson.success is true 
     # I GET AN ERROR HERE ############################################ 
     @setApiToken(returnJson.data.authToken) 
     returnJson.id 
    else 
     "" 
Смежные вопросы