未定義データ角度で外非同期機能を解析するとき

ryard firdaus2:

私は、HTTP呼び出しから取得したデータを、解析する際にスタックを持っており、それを解析しますngOnInitあなたはこの問題を解決するために私を助けることができますか?私は角度4.感謝を使用しています:)

非同期機能:

async getAsyncData() {
      this.asyncResult = await this.serviceDashboard.getAllGeografika().toPromise().then(data => {
        return data.length;
      });
      return this.asyncResult;
}

ngOnInit 私は、データを印刷したい場所:

ngOnInit() {
      console.log('Halo from ngOnInit');
      console.log('print data :' +  this.getAsyncData();
}
クルト・ハミルトン:

あなたはこのようにあなたの関数からの約束を待っていません。

 console.log('print data :' +  this.getAsyncData();

約束ではなく、約束の解決された値を記録しています

あなたは、少なくとも3つの方法でこれを解決することができます。

1.非同期/のawait

async ngOnInit() {
  console.log('Halo from ngOnInit');
  const data = await this.getAsyncData();
  console.log('print data :' + data);
}

async getAsyncData() {
  const data = await this.serviceDashboard.getAllGeografika().toPromise();
  return data.length;
}

この一種の休憩の契約OnInitが、あなたはそれで逃げることができます。

約束を解決2.

これはおそらく、最後のより純粋な形式ですが、それがどのように冗長好まないだろう。

ngOnInit() {
  console.log('Halo from ngOnInit');
  this.getAsyncData().then(data => {
      console.log('print data :' + data);
  });
}

async getAsyncData() {
  const data = await this.serviceDashboard.getAllGeografika().toPromise();
  return data.length;
}

3. RxJS

私の好ましい選択肢。

ngOnInit() {
  console.log('Halo from ngOnInit');
  this.getAsyncData().subscribe(data => {
      console.log('print data :' +  data.length);
  });
}

getAsyncData(): Observable<any> {
  return this.serviceDashboard.getAllGeografika();
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=30619&siteId=1