有关RxJS 5 filter()运算符的询问

时间:2017-02-08 13:58:28

标签: rxjs rxjs5 ngrx

我有一个有角度的2路由器防护,其canActivate方法定义如下:

canActivate() {
    return this.sessionSigninService.isAuthenticated()
      .filter(isAuthenticated => isAuthenticated !== null)
      .map(isAuthenticated => {
        if (isAuthenticated) {
          return true;
        }
        this.router.navigate(['/signin']);
        return false;
      });
  }

来自sessionSigninService

  isAuthenticated(): Observable<boolean> {
    return this.store.select(fromRoot.getAuthenticated);
  }

仅供参考,fromRoot.getAuthenticated初始化为null

canActivate方法被调用且null的{​​{1}}值进入isAuthenticated运算符时,filter()似乎会阻塞filter() isAuthenticated更改为falsetrue

请注意,这是所需的行为,但我不理解......

有人可以解释一下这种行为吗?

1 个答案:

答案 0 :(得分:1)

  

与Array.prototype.filter()类似,只有在传递标准函数时才会从源中发出值。

filter只会在过滤方法的返回值为true时传播数据 - 当您有isAuthenticated: null并评估null !== null时 - &gt;它将返回false,这就是为什么没有传播数据而且不会调用map的原因。

只要您isAuthenticated: true|false,过滤器就会评估为true,因为truefalse都是!== null,并传播数据。< / p>