【发布时间】: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