rxjs switchMap 在 Angular Guard 中不工作?

rxjs switchMap not working in Angular Guard?

return this.auth.user.pipe(
      switchMap((user: IUser) => {
        return of(true);
      })
    );

我的初始代码在某些情况下有点复杂,具体取决于用户数据,但出于测试目的,我在守卫的 canLoad 中使用了上面的代码,但它没有激活。

存在 TS/compilation 个错误。

我已经尝试过使用 Ivy 和不使用它。

我正在使用 Angular 8.3;

您必须使用 take(1),因为我确定 auth.user 是一个流并且不会完成。守卫需要有一个完整的 Observable:

return this.auth.user.pipe(
  take(1),
  switchMap((user: IUser) => of(!!user))
);

也许你删除了一些代码,但你也可以在这里使用地图:

return this.auth.user.pipe(
  take(1),
  map((user: IUser) => !!user)
);