首页 > 解决方案 > 在 RxJs 中动态选择是否返回一个 Observable 或另一个

问题描述

我正在为以下任务寻找最优雅的方式。我知道有多种方法可以做到这一点,并且有多种方法遵循更多的反模式(当然,我不想在这里:订阅中的订阅)。

我的设置

export class MyService {

  giveMeTheBest(...): Observable<TheBest> {
    
    const observable1$ = // Fancy request, returning an Observable
    
    const observable2$ = // A request to a different endpoint, also returning and Observable
    
    return // observable1$, if its content (!) matches a criteria.
    // if observable1$ fails to match a criteria, it should pass on observable2$
    
  }
}

我想做的事

我知道我必须以某种方式查看内容observable1$查看它是否符合某个标准。

问题

  1. 我必须observable1$在服务中订阅吗?(对我来说这感觉不对,因为到目前为止我一直只订阅组件)
  2. 或者是否可以仅使用 .pipe() 与 pipable 运算符结合使用来“在流程中”解决所有问题?

非常感谢!

标签: angularrxjs

解决方案


这基本上是 的工作switchMap。默认情况下,您订阅流 1。如果内容与您尝试实现的内容不匹配,则取消订阅并改为订阅流 2。直到来自 stream1 的下一个发射

observable1$.pipe(switchMap(content => test(content) ? of (content) : observable2$)

推荐阅读