Ad

How Can I Let My If Statement Wait For Get Request To Complete ( GUARD ) Using Angular

- 1 answer

I want to create admin routes for my angular app. I've created a role guard in angular. See my code below.

Now I want my get request to complete before my if statement starts checking if the user is an admin. Is there a way to do this?

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;
      }
  }

Ad

Answer

Don't subscribe, return an observable. Something like

return this.apiService.getUserAdminData().pipe(
    tap(user => this.user = user),
    map(user => user.user_role === 'admin')
);
Ad
source: stackoverflow.com
Ad