【问题标题】:Javascript promise chainingJavascript 承诺链
【发布时间】:2015-10-09 23:35:47
【问题描述】:

我很难理解如何链接承诺。我正在为我的应用程序编写登录功能,利用 Loopback 的 Angular SDK。验证用户凭据后,目标是确认用户的帐户处于活动状态,然后获取一些其他属性,包括用户的角色,如果用户具有管理员权限,则将标志设置为 true。

这是我的代码...

$scope.login = function (user) {
    User.login(user).$promise.then(
        function (data) {
            $rootScope.activeUser = data;
            $rootScope.user_id = $rootScope.activeUser.user.username;
            console.log('Active User: ', $rootScope.activeUser.user.email);
            console.log('Status: ', $rootScope.activeUser.user.status);
            if ($rootScope.activeUser.user.status === 'Y') {
                $scope.loginError = false;

                function checkAdmin(eid) {
                    Se_user.findById({
                        id: eid
                    }).$promise.then(
                        function (data1) {
                            var user_properties = data1;
                            if (user_properties.role === 'Admin') {
                                $rootScope.isAdmin = true;
                                console.log('isAdminInside: ', $rootScope.isAdmin);
                                return true;
                            } else {
                                //$rootScope.isAdmin = false;
                                return false;
                            }
                        });
                };

                var isAdmin = checkAdmin($rootScope.user_id);
                console.log('isAdminOutside: ', $rootScope.isAdmin);
                $state.go('home');

            } else {
                $scope.loginError = true;
                $scope.loginErrorMessage = "Your account has been disabled.  Please contact BMT Support for assistance";
            }
        },
        function (err) {
            console.log('Error: ', err)
            $scope.loginError = true;
            $scope.loginErrorMessage = "You've entered an invalid User ID or Password.  Please try again.";
        });
};

我一直在通过写入控制台进行故障排除,这是输出示例...

 Active User:  user@email.com
 Status:  Y
 isAdminOutside:  undefined
 isAdminInside:  true

我应该如何重组,以便在活动用户成功登录后正确返回 checkAdmin 的结果?

【问题讨论】:

  • Promise 是异步的!在你的承诺得到解决之前,你要求写isAdminOutside,所以现在它是未定义的
  • 我需要做什么才能在 promise 解决后设置 isAdminOutside 值?那是我似乎无法弄清楚的部分。

标签: javascript angularjs function sdk angular-promise


【解决方案1】:

尝试更改这部分代码:

function checkAdmin(eid) {
  return Se_user.findById({
    id: eid
  }).$promise.then(
    function(data1) {
      var user_properties = data1;
      if (user_properties.role === 'Admin') {
        $rootScope.isAdmin = true;
        console.log('isAdminInside: ', $rootScope.isAdmin);
        return true;
      } else {
        //$rootScope.isAdmin = false;
        return false;
      }
    });
};

var isAdmin = checkAdmin($rootScope.user_id)
  .then(function(val) {
    console.log('isAdminOutside: ', val);
    $state.go('home');
  });

【讨论】:

    猜你喜欢
    • 2017-03-13
    • 1970-01-01
    • 2023-01-27
    • 2016-04-14
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多