首页 > 解决方案 > 使用 rxjs 保持深层结构

问题描述

我有一个数组/对象树,比如

a = [
  {x: 1, y: 2},
  {x: 22, y: 11}
]

我想遍历这些条目并调用一个休息服务来添加 x 和 y 并创建一个节点结果:

a = [
  {x: 1, y: 2, result: 3},
  {x: 22, y: 11, result: 33}
]

我在 forkJoin 和其他方面取得了成功,以获得可观察的结果 Observable<Number[]> 但还没有弄清楚如何执行 forkJoin 以使其具有将其放回右侧树的上下文地方。

const results: Observable<Number[]> = from(a).pipe(
  mergeMap(calcArray =>
    forkJoin(
      calcArray.map(calc => 
        this.mathService.add(calc.x, calc.y)
      )
    )
  )
)

这个例子很简单,而实际情况要复杂一些,但这就是它的要点。这似乎是一件很基本的事情。

标签: javascriptrxjs

解决方案


我不确定调用 mathService 的结果是什么样的,但我假设它是一个整数。r 是单个调用的结果,因此请修改result: r以匹配您的实际响应。

combineLatest(a.map(calc => this.mathService.add(calc.x, calc.y))).pipe(
  map(results => results.map((r, i) => ({ ...a[i], result: r })))
)

推荐阅读