正如标题所示,两个函数似乎都有类似的效果,并且当谓词不匹配时,返回不会发出任何内容。看起来像skipWhile是过滤器的反面?
答案 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)
将立即停止跳过,您很快就会感到困惑!