如何在控制器上获取 $q promise 值

how to get the $q promise value on controller

我正在使用 angularJS 中的 $q 来获得承诺。

我会检查控制器中的承诺值以执行某些操作。

但我不知道如何得到它来比较它。

这是我在工厂方法中的做法:

AuthService.getActifUser = function () {
            var deferred = $q.defer();
            cognitoUser = userPool.getCurrentUser();
                if (cognitoUser) {
                     cognitoUser.getSession(function(err, session) {
                                if (err) {
                                        alert(err);
                                        deferred.reject('failed to login');
                                } else {
                                   deferred.resolve('logged in');
                                }
                                 });
                         } else {
                             deferred.reject('not logged in');
                }
                return deferred.promise;
        };

这就是我尝试在我的控制器中获取它的方式:

var res = AuthService.getActifUser();
        console.log(res);
        if (res != 'logged in') {
            console.log(res);
            routeService.goToView('/pages/login')
        }

res 的日志告诉我:

Object { $$state: Object }

有人知道怎么做吗?

Object { $$state: Object } 显示因为你当时你的承诺仍然是 resolving.in 控制器像这样抓住承诺

AuthService.getActifUser().then(function(data){
        var res = data
        console.log(res);
        if (res != 'logged in') {
            console.log(res);
            routeService.goToView('/pages/login')
        }
});

res 是一个 promise,应该解决才能获取数据。

您正在记录的状态对象是 promise 对象的状态。

res.then(function(resp){
 //succesful response
})
.catch(function(err){
 //exception happened
})

你不需要用 if 语句检查 res 你可以这样检查:

var res = AuthService.getActifUser();

        res.then(function (response) {
            console.log("logged successfully");

        }, function (response) {
            routeService.goToView('/pages/login')
        }); 

第一个函数成功结果第二个失败,angular 将自动识别结果