使用switchMap和forkJoin时合并结果

时间:2020-08-31 14:23:40

标签: angular rxjs

我有一个http服务,该服务返回一个对象数组,并使用此结果调用该示例中提供的另一个服务。现在,我如何才能在最后结合中间结果和最终结果。例如:result1Data [0] + result2Data [0]等。

var result1= this.service1.getData();

result1.pipe(
  switchMap(data => {
    let result2 = data.map(result1Data => {
      return this.service2.getData(result1Data);
    });
    return forkJoin(...result2);
  })
).subscribe(result2Data => {
   
 //combine result1Data and result2Data
 
})

2 个答案:

答案 0 :(得分:1)

以下是它的实现方式:

var result1 = this.service1.getData();

result1.pipe(
  switchMap(result1Data => {
    return forkJoin(result1Data.map(this.service2.getData))
      .pipe(
        map(result2Data => {
          //combine result1Data and result2Data ()
        })
      )
    )
  })
).subscribe(result3 => {

  // allready combined

})

答案 1 :(得分:0)

您可以考虑使用switchMap中的maprxjs/operators以及combineLatest中的rxjs的组合


const result1$ = this.service1.getData();

const result2$ = result1$.pipe(
  switchMap(result1Data => this.service2.getData(result1Data))
)

const combinedResult$ = combineLatest([result1$, result2$]).pipe(
  map(([result1Data, result2Data]) => { 

    // combine result1Data and result2Data here

    return combinedResult
  })
 )

combinedResult$.subscribe(result3 => {

  // already combined

})