AngularJS:支持承诺的身份验证服务?

时间:2013-07-12 15:48:02

标签: angularjs angularjs-service

我已经设置了一个身份验证服务,我将其注入到我的登录控制器中,然后将其命名为登录...例如

$ scope.login = function(){

    var loginResult = authentication.login($scope.model.user, $scope.model.pass);

我需要知道登录成功与否的天气,因为我需要根据结果执行一些逻辑。我可以从身份验证服务登录返回一个bool,但问题是在我的登录中它调用了一个有承诺的休息服务。像这样

       return {
         authenticate: function (username, password) {

            var enc = base64.encode(username + ':' + password);

            AuthRestangular.setDefaultHeaders({'Authorization': 'Basic ' + enc });


            AuthRestangular.one('login').get().then(function (data) {
                isLoggedIn = true;
                return true;
            }, function () {
                return false;
            });

所以Rest服务需要几秒钟才能返回,它返回一个promise,即......然后是true或false。因此,在我有承诺之前,服务实际上会返回登录控制器。

所以我很困惑我应该在这里做什么,我可以让我的服务也回复承诺吗?另外,loginResult始终为false,因为它没有及时返回,因此我的bool的默认值为false。

任何想法

由于

1 个答案:

答案 0 :(得分:2)

您不应该从服务返回true false而应该从服务返回一个promise并在控制器中使用该promise

--service 
return {
         authenticate: function (username, password) {

            var enc = base64.encode(username + ':' + password);

            AuthRestangular.setDefaultHeaders({'Authorization': 'Basic ' + enc });


           return  AuthRestangular.one('login').get();
            });


--controller 

authentication.login($scope.model.user, $scope.model.pass).then(function(data){})