Javascript承诺链接

Javascript promise chaining

本文关键字:链接 承诺 Javascript      更新时间:2023-09-26

我很难理解如何链接承诺。我正在为我的应用程序编写登录功能,利用环回的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的结果?

尝试修改这部分代码:

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');
  });