首页 > 解决方案 > rxjs switchMap 在 Angular Guard 中不起作用?

问题描述

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

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

有任何 TS/编译错误。

我已经尝试过使用常春藤和不使用。

我正在使用 Angular 8.3;

标签: angularrxjsangular-router-guardsswitchmap

解决方案


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

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

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

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

推荐阅读