【问题标题】:Rxjs Forkjoin, how do I return single array for a particular property?Rxjs Forkjoin,如何为特定属性返回单个数组?
【发布时间】:2020-05-23 00:51:08
【问题描述】:

我有一个分叉连接,可以从 10 个 http 源中获取数据,并且运行良好。每个源的结构都是一样的。但是,我正在寻找的结果在响应的“数据”属性中。我需要将所有结果放入一个对象数组中。

回应

{
 data:[stuff],
 included: [stuff],
 version: 1.0
}

代码

 forkJoin(requestArray).subscribe(results => {
   console.log(results);
 });

如何返回这个 forkjoin 的结果,将每个响应的 data 属性中的所有数组合并到一个数组中?

期望的输出

[{all-Data-Objects-In-An-Array}, ...]

【问题讨论】:

    标签: javascript angular rxjs


    【解决方案1】:
    import { Component } from "@angular/core";
    import { Observable } from "rxjs/Observable";
    import "rxjs/add/observable/timer";
    import "rxjs/add/operator/do";
    import "rxjs/add/operator/take";
    import "rxjs/add/operator/share";
    import "rxjs/add/operator/shareReplay";
    import { forkJoin } from "rxjs/observable/forkJoin";
    import { of } from "rxjs/observable/of";
    import { tap, map } from "rxjs/operators";
    
    @Component({
      selector: "my-app",
      templateUrl: "./app.component.html",
      styleUrls: ["./app.component.css"]
    })
    export class AppComponent {
      name = "Angular 5";
      data1 = {
        data: ["abc"],
        version: 1.0
      };
      data2 = {
        data: ["abc"],
        version: 1.0
      };
      private init$: Observable<any>;
    
      public ngOnInit() {
        forkJoin(of(this.data1), of(this.data2))
          .pipe(
            map(results => results.reduce((all, itm) => all.concat(itm.data), []))
          )
          .subscribe(results => {
            console.log(results);
          });
      }
    }
    

    【讨论】:

    • 这不会生成单个数组,而是一个数组数组。 [ [ {response1Objects} ] , [ {response2Objects} ] ] 我想要一个数组中的所有响应对象
    【解决方案2】:

    只需添加一个 map 运算符并在其中运行 reduce...

    forkJoin(requestArray).pipe(
      map(results => results.reduce((all, itm) => all.concat(itm.data), []))
    ).subscribe(results => {
       console.log(results);
     });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2019-02-28
      相关资源
      最近更新 更多