RxJs Observable:如果为空/过滤则执行函数

Ben*_*n M 6 filter observable rxjs rxjs5 angular

我有一个Observable,可以从文本框中监听一些用户输入.如果观察到的字符串长度> = 3(filter),则执行一些HTTP调用(switchMap).

现在我想以某种方式检测用户输入是否已被过滤.原因:

  • 如果已完成HTTP调用,则应显示结果.

  • 如果用户输入已过滤(==无效),则应清除结果.

这是我想要的代码(参见:) ifFiltered:

this.userInput.valueChanges
    .filter(val => val && val.length >= 3)
    .ifFiltered(() => this.results = [])
    .switchMap(val => getDataViaHTTP())
    .subscribe(val => this.results = val);
Run Code Online (Sandbox Code Playgroud)

我知道,我可以将这个逻辑放在filter这个简单例子的函数中.但是,如果我有10个不同的过滤器呢?

我是否错过任何满足我需求的方法?

提前致谢!

Mar*_*kus 4

要么像这里的 RxJS 建模那样使用分区,否则使用 Observables 运算符控制结构

或者,如果前一个过滤条件为 true 或 null,则使用映射代替过滤器并通过管道传递对象。这样你就可以用过滤器在链中任何你想要的地方捕获空值。

最后一个选项调用过滤器函数的 else 部分中的某个函数

  • 什么是“过滤器函数的 else 部分”? (3认同)