【发布时间】:2020-11-09 02:53:19
【问题描述】:
我正在编写一个代码来检查浏览器是否有 userInfo。如果没有,浏览器会调用 API 从服务器获取 userInfo。仅当存在有效的 userInfo 时,才允许用户导航到页面。
我的问题是 canactivate() 不等待调用完成。我试过其他线程中提到的解析器,但它也没有用。
所以,我设置了 async-await,但它也不起作用。 canactivate() 在 getUser() 完成之前返回。下面代码中的 async-await 的语法有错吗?
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router, private refService: RefService, private userInfoService: UserInfoService) {
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
this.getUser();
console.info('canActivate completed');
return this.userInfoService.getUserInfo() !== null;
}
async getUser() {
if(!this.userInfoService.getUserInfo()) {
await this.refService.getTamUser().toPromise( ).then(data => {
this.userInfoService.setUserInfo(data);
});
}
}
}
【问题讨论】:
-
您介意检查一下解决您问题的答案吗?
标签: angular typescript