Angular 9 - Guard: canActivate 等待特定条件满足

Angular 9 - Guard: canActivate wait until specific condition is met

我有以下代码

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {

 this.userStore$ = this.store.pipe(select('userStore'));
 return this.userStore$.pipe(
   map( res => { 
     if(res) return true 
   }))
}
      

第一次 res 是未定义的,所以 canActivate 解析自己 returning false。我需要的是保持它的监听,直到 res 被赋值,然后 return true 继续前进。 我该怎么做?谢谢

看得出你对RXJS相当熟悉。 RXJS 提供了过滤器功能,可以根据特定条件允许或拒绝流的流动。

如果您将过滤器管道添加到流中,它将根据条件拒绝所有流。您始终必须指定真正的条件才能让流程继续进行。

文档https://www.learnrxjs.io/learn-rxjs/operators/filtering/filter

// you need to import the filter from rxjs operators
import {filter, map } 'rxjs/operators';

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {

 this.userStore$ = this.store.pipe(select('userStore'));
 return this.userStore$.pipe(
   filter(res => res != undefined),
   map( res => { 
     if(res) return true 
   }))
}