angular – 否定守卫中的承诺结果
发布时间:2020-12-17 17:54:46 所属栏目:安全 来源:网络整理
导读:我有一个工作的angular2 guard,带有一个canActivate(),它调用isLoggedIn()的服务并返回一个promise然后解析并且路由被适当地处理. 但是,我试图做相反的事情,看看用户何时没有登录,并且它无法正常工作. 我尝试了一些简单的事情(添加一个!运算符),希望它可以
我有一个工作的angular2 guard,带有一个canActivate(),它调用isLoggedIn()的服务并返回一个promise然后解析并且路由被适当地处理.
但是,我试图做相反的事情,看看用户何时没有登录,并且它无法正常工作. 我尝试了一些简单的事情(添加一个!运算符),希望它可以工作: @Injectable() export class AuthGuard implements CanActivate { constructor(private authService: AuthService) {} canActivate() { return !this.authService.isLoggedIn(); } } 但是,这总是返回一个假值,并且路径永远不会激活. 这是我的isLoggedIn()函数的相关摘录: isLoggedIn(): Promise<Boolean> { var component = this; return new Promise((resolve,reject) => { component.queryForUser((user) => { resolve(user != null); }); } }); } 如果用户不等于null,则他登录并且promise以true结算.否则,错误. 虽然我可以简单地添加一个参数来指定我要查找的状态,或者甚至创建一个isNotLoggedIn()函数,但是具有相同的逻辑但反转,我问,有没有办法否定对于canActivate的promise的决心的价值()? 解决方法
return!this.authService.isLoggedIn()将无效,因为JS的工作方式. this.authService.isLoggedIn()是promise对象并且是真实的. !this.authService.isLoggedIn()将始终为false.
相反,promise结果应映射到否定结果 canActivate() { return this.authService.isLoggedIn().then(result => !result); } 要么 async canActivate() { return !(await this.authService.isLoggedIn()); } 等待的括号……是可选的,用于可读性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |