2015-06-24 174 views
0

我最近開始使用AngularJS,雖然我可以看到一些改進,但我無法讓我的腦袋繞過承諾。我創建了一個登錄服務,該服務使用Parse框架使用戶能夠註冊,並使用註冊控制器將數據從表單發送到服務。由於註冊需要幾秒鐘,我決定使用諾言將當前用戶返回登錄控制器,一旦他註冊了。不幸的是,我不斷收到這個錯誤:無法讀取未定義的屬性'然後'。有人能指點我正確的方向嗎?AngularJS服務沒有返回承諾

控制器:

(function() { 
'use strict'; 

angular 
    .module('app.register') 
    .controller('RegisterController', RegisterController); 

RegisterController.$inject = ['$q', 'logger', 'loginservice']; 
/* @ngInject */ 
function RegisterController($q, logger, loginservice) { 
    var vm = this; 
    vm.title = 'Register'; 
    vm.register = register;  
    vm.user = { 
     username: "", 
     password: "", 
     email: "" 
    }; 

    activate(); 

    function activate() { 
     logger.info('Activated Register View'); 
    } 

    function register() { 
     var promise = loginservice.register(vm.user.username, vm.user.email, vm.user.password); 

     promise.then(function(userData) { 
      console.log("User: ", userData); 
     }); 
    } 
} 
})(); 

服務:

(function() { 
'use strict'; 

angular 
    .module('app.core') 
    .factory('loginservice', loginservice); 

loginservice.$inject = ['$http', '$q', 'logger']; 
/* @ngInject */ 
function loginservice($http, $q, logger) { 
    var service = { 
     // logIn: logIn, 
     // logOut: logOut, 
     register: register 
    }; 

    return service; 

    function initialize() { 
     console.log("parse initialized"); 
    } 

    function register(username, email, password) { 
     //alert("HELLO FROM " + username + " " + password + " " + email); 

     Parse.initialize(appId, parseId); 
     var user = new Parse.User(); 
     user.set("username", username); 
     user.set("password", password); 
     user.set("email", email); 

     $http.get(user.signUp(null, { 
     success: function(user) { 
      return user; 
      }, 
      error: function(user, error) { 
      return error.message; 
      // Show the error message somewhere and let the user try again. 
      alert("Error: " + error.code + " " + error.message); 
      } 
     })).then(function() { 
      return user; 
     }); 
    } 
} 
})(); 
+0

你只錯過了從'.register'服務方法返回'$ http.get' –

回答

1

你只需要return$http電話:

function register(username, email, password) { 
     //alert("HELLO FROM " + username + " " + password + " " + email); 

     Parse.initialize(appId, parseId); 
     var user = new Parse.User(); 
     user.set("username", username); 
     user.set("password", password); 
     user.set("email", email); 

     return $http.get(user.signUp(null, { 
     success: function(user) { 
      return user; 
      }, 
      error: function(user, error) { 
      return error.message; 
      // Show the error message somewhere and let the user try again. 
      alert("Error: " + error.code + " " + error.message); 
      } 
     })).then(function() { 
      return user; 
     }); 
    } 

如果您未返回在$http呼叫期間創建的承諾,則函數(默認情況下)返回undefined

+0

哈哈,完美,非常感謝回報聲明可能爲我節省了大量的時間! :)我會把這個標記爲答案,你很快就回答了我不能再做8分鐘。 –

0

只返回$http呼叫,像這樣

function register(username, email, password) { 
    ... 
    return $http.get(user.signUp(null, { 
    success: function(user) { 
     return user; 
     }, 
     error: function(user, error) { 
     return error.message; 
     // Show the error message somewhere and let the user try again. 
     alert("Error: " + error.code + " " + error.message); 
     } 
    })).then(function() { 
     return user; 
    }); 
}