Angular 等待身份验证服务加载,然后guard返回结果

Angular 等待身份验证服务加载,然后guard返回结果,angular,rxjs,Angular,Rxjs,我的身份验证服务具有以下行为主题 public isLoggedIn$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false); public isLoaded$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false); 当用户已经登录到该站点时,需要一秒钟的时间来加载身份验证服务并将isLoggedIn

我的身份验证服务具有以下行为主题

public isLoggedIn$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
public isLoaded$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
当用户已经登录到该站点时,需要一秒钟的时间来加载身份验证服务并将isLoggedIn$设置为true。有没有办法在返回之前等待行为主体的下一个值发生更改?我想象它看起来像这样

export class AuthGuard implements CanActivate {
    private authLoaded = false;
    private loggedIn = false;

    constructor(
        private authService: AuthService,
        private router: Router,
        private toast: ToastrService,
    ) {
        authService.isLoggedIn$.subscribe(loggedIn => {
            this.loggedIn = loggedIn;
        });

        authService.isLoaded$.subscribe(authLoaded => {
            this.authLoaded = authLoaded;
        });
    }

    canActivate(
        next: ActivatedRouteSnapshot,
        state: RouterStateSnapshot,
    ): Observable<boolean> | boolean {
        if (this.authLoaded === false) {
            this.authService.isLoggedIn$.subscribe..awaitForNextValue..(loggedIn => {
                this.loggedIn = loggedIn;
                return of(this.loggedIn);
            });
        } else {
            return this.loggedIn;
        }
    }
}
在单据中,检查退货类型。如果您返回一个布尔值而不是其他可观察的| Promise | boolean | UrlTree,它将同步执行而不是异步执行

此外,防护装置将按照其在该路由防护装置阵列中的顺序执行。

也许您可以检查: