首页 > 解决方案 > 如何让我的 if 语句等待获取请求完成( GUARD )使用角度

问题描述

我想为我的 Angular 应用程序创建管理路由。我在 Angular 中创建了一个角色守卫。请参阅下面的代码。

现在我希望我的 get 请求在我的 if 语句开始检查用户是否是管理员之前完成。有没有办法做到这一点?

export class RoleGuardGuard implements CanActivate {

  public user;

  constructor( private apiService: ApiService ) {}

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {

      this.apiService.getUserAdminData().subscribe((data)=>{
        this.user = data;
      });

      if (this.user.user_role === 'admin') {
        return true;
      } else {
        return false;
      }
  }

标签: javascriptangularrouting

解决方案


不要订阅,返回一个 observable。就像是

return this.apiService.getUserAdminData().pipe(
    tap(user => this.user = user),
    map(user => user.user_role === 'admin')
);

推荐阅读