Javascript 如何在控制器上获得$q承诺值
我使用angularJS的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) {
$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将自动识别结果您使用任何路由吗?谢谢伙计,这太完美了!