在RxJS中skipWhile和filter有什么区别?

时间:2018-03-07 06:55:22

标签: rxjs

正如标题所示,两个函数似乎都有类似的效果,并且当谓词不匹配时,返回不会发出任何内容。看起来像skipWhile是过滤器的反面?

1 个答案:

答案 0 :(得分:0)

@cartant所说

  

skipWhile“ ...一旦条件变为假,就会发出所有其他源项目”

请注意,skipWhile带有一个谓词(返回布尔值的表达式)。

此外还有skipUntil,它需要一个可观察对象,并且值将被跳过,直到该可观察对象发出任何东西

因此有时以下内容可能有用(pan是Hammerjs事件顺便说一句):

  // When event.deltaX reaches 20 emit true to indicate a threshold is reached
  const thresholdReached$ = pan$.pipe(map(e => Math.abs(e.deltaX) > 20 ), first(v => v), shareReplay(1));

  // Emit all events, but skip them until the first time that thresholdReached$ emits
  const panMove$ = pan$.pipe(skipUntil(thresholdReached$));

重要的是意识到传递给skipUntil的可观察对象可以发出 any 值来触发跳过停止。不一定是“真实”的值。

因此,如果您有var b = new BehaviorSubject(false),那么skipUntil(b)将立即停止跳过,您很快就会感到困惑!