如何使用RXJS在仅数组的一个Observable中合并数组的Array Observavble?

我想在parelel中执行x个请求,并用RXJS将数组的Observavble合并到一个Observable数组中?

public getMetrics(url: string): Observable<GenericMetric[]> {    
    const ox: Observable<GenericMetric[]>[] = [];
    res.forEach(elem => {
        ox.push(this.http.get<GenericMetric[]>(url));
    });

    return forkJoin(...ox);
}

我尝试:

return forkJoin(...ox); // return array of GenericMetric[] but I want all results in GenericMetric[]

我正在寻找如何将我的数组结果数组合并到一个数组中

return forkJoin(ox).pipe(?????);

编辑:

我尝试:

return forkJoin(...ox).pipe(tap(d => console.log(d) ));

我的结果是:

[
  [{a:1},{a:2},{a:3}],[{a:4},{a:5}]
]

但我想要:

[{a:1},{a:3},{a:4},{a:5}]
dhtz125 回答:如何使用RXJS在仅数组的一个Observable中合并数组的Array Observavble?

这是一个有关如何实现所需结果的演示。您可以使用ES6的spread syntax展平为数组数组。

const arr = [
  [{a:1},{a:2},{a:3}],[{a:4},{a:5}]
];
const res = [];
arr.map(item => {
  res.push(...item)
})

console.log(res)

forkJoin(ox)将返回类型为Observable<GenericMetric[]>[]的可观察值,这意味着它是GenericMetric[]的数组。您无法将其简化为GenericMetric(GenericMetric[])数组。

但是,您仍然可以通过使用map之类的可管道运算符来操纵forkJoin(ox)的结果,

forkJoin(ox)
  .pipe( 
    map(res => {
      const result = [];
      res.map(elem => {
        res.push(...elem)
      });
      return result;
    }),).subscribe(res => {
    console.log(res);
    // do the rest
  })
,

我的结果是选项卡的unic元素选项卡,但是如果您有多个选项卡选项卡

[
  [
    [{a:1},{a:5}]
  ],[
    [{a:6},{a:7},{a:8}],[{a:9},{a:10}]
  ]
]

,您可以使用switchMap

public getMetrics(url: string): Observable<GenericMetric[]> {    
    const ox: Observable<GenericMetric[]>[] = [];
    res.forEach(elem => {
        ox.push(this.http.get<GenericMetric[]>(url));
    });

    return forkJoin(ox).pipe(switchMap(allGenericMetrics => {
                              let genericMetrics: GenericMetric[] = [];
                              allGenericMetrics.forEach(metrics => {
                                genericMetrics = genericMetrics.concat(metrics);
                              });
                              return of(genericMetrics);
                             })
                        );
}
本文链接:https://www.f2er.com/3160525.html

大家都在问