Chr*_*uez 4 promise typescript angular2-routing angular
我有一个工作的angular2警卫,其中一个canActivate()调用服务isLoggedIn()并返回一个承诺然后解决,并且路线被适当地处理.
但是,我试图做相反的事情,看看用户何时没有登录,并且它无法正常工作.
我尝试了一些简单的事情(添加一个!运算符),希望它能工作:
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService) {}
canActivate() {
return !this.authService.isLoggedIn();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这总是返回一个假值,并且路径永远不会激活.
这是我的isLoggedIn()功能的相关摘录:
isLoggedIn(): Promise<Boolean> {
var component = this;
return new Promise((resolve, reject) => {
component.queryForUser((user) => {
resolve(user != null);
});
}
});
}
Run Code Online (Sandbox Code Playgroud)
如果用户不等于null,则他登录并且promise以true结算.否则,错误.
虽然我可以简单地添加一个参数来指定我正在寻找的状态,或者甚至创建一个isNotLoggedIn()具有相同逻辑但反转的函数,我问,有没有办法否定承诺的决心的价值canActivate()?
return !this.authService.isLoggedIn()因为JS的工作方式不会起作用.this.authService.isLoggedIn()是承诺对象并且是真实的.!this.authService.isLoggedIn()永远都是假的.
相反,promise结果应映射到否定结果
canActivate() {
return this.authService.isLoggedIn().then(result => !result);
}
Run Code Online (Sandbox Code Playgroud)
要么
async canActivate() {
return !(await this.authService.isLoggedIn());
}
Run Code Online (Sandbox Code Playgroud)
括号周围await ...是可选的,用于可读性.
您需要做的就是进一步操纵承诺的解析值:
canActivate() {
return this.authService.isLoggedIn().then(loggedIn => !loggedIn);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1026 次 |
| 最近记录: |