【问题标题】:RxJs Operator simplification : switchMap, combineLatestRxJs 运算符简化:switchMap、combineLatest
【发布时间】:2021-12-30 16:54:26
【问题描述】:

我有以下 RxJS 订阅:

combineLatest([obs1$, obs2$])
  .pipe(
     filter(val=>!!val[0] && !!val[1]), // no null value on both
     switchMap(([val1, val2]) => combineLatest([of(v1), getObs3$(v2)]))
   )
   .subscribe(([val1, val3]) => { ... });

代码按预期工作,但感觉很麻烦。我很确定带有 of() 操作符的 switchMap 到 combineLatest 是可以改进的。

注意:为了调用getObs3$(v2),我需要先确定obs1$ 中的值。另外,我确实需要订阅中的 val1,因为我稍后会使用它。

有人知道如何优化这个吗?

【问题讨论】:

    标签: angular typescript rxjs reactive rxjs-pipeable-operators


    【解决方案1】:

    一种可能性:

    combineLatest([obs1$, obs2$]).pipe(
    
      // no null value on both
      filter(val=>!!val[0] && !!val[1]),
    
      switchMap(([val1, val2]) => getObs3$(val2).pipe(
        map(val3 => [val1,val3])
      ))
    
    ).subscribe(([val1, val3]) => { ... });
    

    这是您经常会看到的一般模式。这里我们将 val3 插入到一个元组中,所以它与 combine latest 没有太大区别,但是如果它丰富一个对象(无论嵌套多么深),同样的模式将适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 2022-08-21
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      相关资源
      最近更新 更多