使用take(1)和Observable <boolean>吗?

时间:2018-12-11 01:21:26

标签: javascript node.js angular typescript rxjs

阅读through this article并使用以下CanActivate检查来查看是否允许用户导航到主页:

canActivate(): Observable<boolean> {
 return this.authQuery.isLoggedIn$.pipe(
   take(1),
   switchMap((isLoggedIn) => {
     if (!isLoggedIn) {
       this.router.navigate(['/login']);
     }
     return of(isLoggedIn);
   })
);

我想知道take(1)的目的是什么?由于isLoggedIn$Observable<boolean>的实例,因此似乎总是只有1个?

1 个答案:

答案 0 :(得分:1)

是的,只需要一次读取快照即可。

canActivate的情况下,这是一个问题,因为您不订阅,是否需要它,因此angular会处理可释放的资源,因为您返回的是可观察的。所以在这种情况下我不会使用take

take非常重要,如果您要订阅,以便在不需要可观察物时停止收听