web-dev-qa-db-ja.com

Angular 8複数のHTTPリクエストを作成し、すべての結果を組み合わせます。

Forkjoinを使って、複数のHTTP GETリクエストを実行してから、すべての結果をAngular 8を使用してすべての結果を単純な配列にまとめています。

問題は、1つの文字列の代わりに配列の配列で終わることです。

以下のコードすべてのエンドポイントは文字列のリストを返します。

_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);
    });
}
_

私は何が悪いのですか?すべての結果を1つの大きな配列に組み合わせるにはどうすればよいですか。

5
khansen

あなたはこのようにすることができます

 forkJoin([res1, res2, res3, res4, res5])
.pipe(map([res1, res2, res3, res4, res5]) 
    => [...res1, ...res2, ...res3, ...res4, ...res5])).subscribe(data => {
    this.autoCompleteValues = data;
    console.log(this.autoCompleteValues);
});
 _

マップオペレータを必ずインポートしてください

import { map } from "rxjs/operators";
 _
0
Tony Ngo

app.component.ts

import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { forkJoin } from 'rxjs/observable/forkJoin';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  response = [];
  constructor(public http: HttpClient) {
    const request1 = this.http.get('https://restcountries.eu/rest/v1/name/india');
    const request2 = this.http.get('https://restcountries.eu/rest/v1/name/us');
    const request3 = this.http.get('https://restcountries.eu/rest/v1/name/ame');
    const request4 = this.http.get('https://restcountries.eu/rest/v1/name/ja');

    const requestArray = [];
    requestArray.Push(request1);
    requestArray.Push(request2);
    requestArray.Push(request3);
    requestArray.Push(request4);

    forkJoin(requestArray).subscribe(results => {
      console.log(results);
      this.response = results;
    });
  }
}
 _
0
Yogesh Waghmare