gpt4 book ai didi

angular - 在守卫中否定 promise 的结果

转载 作者:太空狗 更新时间:2023-10-29 17:43:53 26 4
gpt4 key购买 nike

我有一个带有 canActivate() 的工作 angular2 守卫,它调用 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());
}

await ... 两边的括号是可选的,用于提高可读性。

关于angular - 在守卫中否定 promise 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43243074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com