0

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

$scope.login = 函数(){

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

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

       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 服务需要几秒钟的时间才能返回,它会返回一个承诺,即 then .... true 或 false。所以服务实际上在我得到承诺之前返回到登录控制器。

所以我很困惑我应该在这里做什么,我可以让我的服务也回报一个承诺吗?否则 loginResult 始终为 false,因为它不会及时返回,因此我的 bool 的默认值为 false。

有任何想法吗

谢谢

4

1 回答 1

2

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

--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){})
于 2013-07-12T15:56:32.670 回答