代码之家  ›  专栏  ›  技术社区  ›  dashambles

用rxjs保持深层结构

  •  0
  • dashambles  · 技术社区  · 5 年前

    我有一个类似的数组/对象树

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

    我想迭代这些条目并调用rest服务来添加x和y并创建节点结果:

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

    我成功地使用forkJoin和其他工具获得了可观测的结果;编号[]>但还没有弄清楚如何以一种有上下文的方式执行forkJoin,以便将其放回树中的正确位置。

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

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

    0 回复  |  直到 5 年前
        1
  •  0
  •   Adrian Brand    5 年前

    我不确定调用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 })))
    )