Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在控制器上获得$q承诺值_Javascript_Angularjs_Angular Promise_Q - Fatal编程技术网

Javascript 如何在控制器上获得$q承诺值

Javascript 如何在控制器上获得$q承诺值,javascript,angularjs,angular-promise,q,Javascript,Angularjs,Angular Promise,Q,我使用angularJS的$q来获得承诺 我将检查控制器中的承诺值以执行一些操作 但我不知道如何让它来比较 这是我在工厂方法中的做法: AuthService.getActifUser = function () { var deferred = $q.defer(); cognitoUser = userPool.getCurrentUser(); if (cognitoUser) {

我使用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 }

有人知道怎么做?

对象{$$state:Object}
显示的原因是您当时的承诺仍在解决中。在控制器中,您可以像这样捕获承诺

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

res是一个承诺,应该通过解析来获取数据

您正在记录的状态对象是
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将自动识别结果

您使用任何路由吗?谢谢伙计,这太完美了!