[英]Troubles using promise with AngularJS
我目前正在开发基于node.js的应用程序,服务器端似乎运行正常,但与公共端的日子很艰难。
我试图使用与控制器 AngularJS的承诺 。 这是我的代码:
var userId;
var userEmail = "somethingICanRecognizeInCaseItDoesntChange";
function getUserInfos(){
var deferred = $q.defer();
if(SessionStorageService.get('token')){
Auth.isAlive().success(function(user){
$scope.user = user;
console.log("user :", user);
console.log("user email :", user.email);
deferred.resolve(user.email);
});
}
else {
$scope.user = {};
deferred.resolve([]);
}
return deferred.promise;
}
userEmail = getUserInfos();
console.log("result :", userEmail);
我认为控制台中的result
将与user email
相同,但事实并非如此。 这是控制台日志:
result : Object { $$state: Object }
user : Object { firstName: "super", lastName: "admin", email: "a", isSuperAdmin: true, _ts: "2016-05-03T11:17:06.943Z" } website-ranking.js:41:21
user email : a
问题是,无论我尝试,我从来没有a
作为结果。 我尝试了诸如getUserInfos().$$state
, getUserInfos().$$state.value
, getUserInfos().$$state.Object
, getUserInfos().Object
, getUserInfos().Object.value
,但这些都getUserInfos().Object.value
。
我在这里想念什么? 我是否以错误的方式使用了诺言? 我忘记了什么吗?
请不要犹豫告诉我是否可以改进此问题,我很乐意添加代码,或者您可能需要帮助我解决问题的任何信息。
编辑:事实是,我已经在其他地方使用了大多数代码,只是因为我添加了保证,我有点迷路了。 例如,在这里,我使用Auth.isAlive()没有任何问题:
function getUserInfos(cb){
if(SessionStorageService.get('token')){
Auth.isAlive().success(function(user){
$scope.user = user;
cb();
});
}
else {
$scope.user = {};
cb();
}
}
$ scope.user已修改,可以在应用程序中进一步使用,没有问题。
由于该问题被标记为可能重复,因此我想进一步解释一下:我知道我为什么要使用诺言,而且我认为我了解javascript中async的不同问题。 这是我的问题,尽管我过去已经成功使用了Promise,但我的代码却无法正常工作,我也不明白为什么。 我不是在问如何从异步调用中获取响应,而是可以帮助我理解编写代码时哪里出错了。 如果您仍然认为这是重复项,请在评论中让我知道,然后我将进行处理,可能是我错过了所提供链接中的某些内容。
由于您的方法getUserInfos()返回了一个Promise,因此您可以执行以下操作:
var userId;
var userEmail = "somethingICanRecognizeInCaseItDoesntChange";
function getUserInfos(){
var deferred = $q.defer();
if(SessionStorageService.get('token')){
Auth.isAlive().success(function(user){
$scope.user = user;
console.log("user :", user);
console.log("user email :", user.email);
deferred.resolve(user.email);
});
}
else {
$scope.user = {};
deferred.resolve([]);
}
return deferred.promise;
}
getUserInfos().then(function(_email){
userEmail = _email;
console.log("result :", userEmail);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.