簡體   English   中英

JavaScript承諾鏈

[英]Javascript promise chaining

我很難理解如何兌現承諾。 我正在使用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的結果?

嘗試更改部分代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM