javascript – AngularJS:如何在服务中完成AJAX调用后执行控制器功能?

这是我在服务中的代码.

this.loginUser = function(checkUser) {
    Parse.User.logIn(checkUser.username, checkUser.password, {
        success: function(user) {
            $rootScope.$apply(function (){
                $rootScope.currentUser = user;
            });
        }
    });
};

这是我在控制器中的代码:

$scope.logIn = function(){
    authenticationService.loginUser($scope.checkUser);
        console.log($scope.currentUser)
};

所以,我想要做的是,在完成AJAX调用后执行一些代码,其成功函数设置$scope.currentUser的值,我可以用于某些条件逻辑(如重定向等)
success函数正确设置了值,但是在执行authenticationService.loginUser()函数之后应该执行console.log.

最佳答案
您需要使用$q返回一个承诺并对其采取行动.

例如,在您的服务中:

this.loginUser = function(checkUser) {
    var deferred = $q.defer();
    Parse.User.logIn(checkUser.username, checkUser.password, {
        success: function(user) {
            $rootScope.$apply(function (){
                $rootScope.currentUser = user;
            });
            deferred.resolve();
        }
    });
    return deferred.promise;
};

然后在你的控制器中取得成功:

$scope.logIn = function(){
    authenticationService.loginUser($scope.checkUser).then(function() {
        console.log($rootScope.currentUser));
    });
};

转载注明原文:javascript – AngularJS:如何在服务中完成AJAX调用后执行控制器功能? - 代码日志