javascript - 在 AngularJS 中使用 Promise 时出现问题

标签 javascript angularjs promise

我目前正在开发一个基于node.js的应用程序,服务器端似乎运行正常,但我在公共(public)端遇到了困难。

我正在尝试在 Controller 中使用promiseAngularJS。这是我的代码:

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 : 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

以下是我在浏览器控制台中单击Object 得到的屏幕截图:console

问题是,无论我尝试什么,我都没有得到a结果。我尝试了诸如 getUserInfos().$$stategetUserInfos().$$state.valuegetUserInfos().$$state.Object code>、getUserInfos().ObjectgetUserInfos().Object.value 这些都不起作用。

我在这里想念什么?我是否以错误的方式使用 Promise ?我是不是忘记了什么?

请随时告诉我这个问题是否可以改进,我很乐意添加代码或您可能需要的任何信息来帮助我解决问题。

编辑:问题是,我已经在其他地方使用了大部分代码,只是因为我添加了 promise ,我有点迷失了。例如,我使用 Auth.isAlive() 没有任何问题:

function getUserInfos(cb){
            if(SessionStorageService.get('token')){
                Auth.isAlive().success(function(user){
                    $scope.user = user;
                    cb();
                });
            }
            else {
                $scope.user = {};
                cb();
            }
        }

$scope.user 已修改并可以在应用程序中进一步使用,没有任何问题。

由于问题已被标记为可能重复,我想多解释一下:我知道为什么我使用 promise ,并且我认为我理解 javascript 中异步的不同问题。这里我的问题是我的代码不起作用,我不明白为什么,尽管我过去已经成功地使用了 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);
});

关于javascript - 在 AngularJS 中使用 Promise 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37006107/

相关文章:

javascript - 两次调用 javascript 函数的问题

javascript - 使用 JavaScript,是否可以从传出的获取请求中捕获正文有效负载?

javascript - 替换后正确的子串位置

javascript - 获取 AngularJS [$injector :modulerr] even when code is correct

javascript - 你能让 Javascript Promise 的成功处理程序失败吗?

node.js - promise - 捕获内投

javascript - Angular : calling transclude directive function from within the transcluded component

javascript - Uncaught Error bootstrap 需要在 bootstrap.min.js 处使用 jquery

javascript - 使用 Angular UI Router 进行嵌套路由

javascript - 如何使用 javascript promises 执行相同的函数?