Angular 8 发出多个 http 请求并合并所有结果

kha*_*sen 6 fork-join rxjs typescript angular angular8

我正在尝试使用 forkJoin 来执行多个 http get 请求,然后使用 Angular 8 将所有结果组合成一个简单的数组。

问题是我最终得到了一个数组数组......而不是一个字符串数组

我的代码如下。所有端点都返回一个字符串列表。

autoCompleteValues: any;

ngOnInit() {

    let res1 = this.dataMessageService.getFoo1();
    let res2 = this.dataMessageService.getFoo2();
    let res3 = this.dataMessageService.getFoo3();
    let res4 = this.dataMessageService.getFoo4();
    let res5 = this.dataMessageService.getFoo5();

    forkJoin([res1, res2, res3, res4, res5]).subscribe(data => {

      this.autoCompleteValues = data;
      console.log(this.autoCompleteValues);
    });
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如何将所有结果合并到一个大数组中?

ana*_*val 9

您的代码是正确的,因为这是 forkjoin 的预期行为,您只需要稍微映射它

forkJoin([res1, res2, res3, res4, res5])
.pipe(map(data => data.reduce((result,arr)=>[...result,...arr],[])))
.subscribe(data =>{

  this.autoCompleteValues = data;
  console.log(this.autoCompleteValues);
});
Run Code Online (Sandbox Code Playgroud)


Vah*_*afi 9

而不是这个:

forkJoin([res1, res2]).subscribe((data) => {
    console.log(data)
});
Run Code Online (Sandbox Code Playgroud)

做这个:

forkJoin([res1, res2]).subscribe(([data1, data2]) => {
    console.log(data1)
    console.log(data2)
});
Run Code Online (Sandbox Code Playgroud)