2017-11-01 13 views
0

データをobservableからプロパティに設定する必要があります。それはカムバックへの応答に時間がかかる。プロパティはundefinedに設定されます。サーバーからクラスプロパティにデータを設定するにはどうすればいいですか?サーバからクラスのプロパティにデータを設定する角度2

ngOnInit() { 
    this.comics.getChar().subscribe((responses: Response) => this.data = responses[1].json().data.results); 
    this.comicsList = this.data; // gives undefined 
    console.log(this.comicsList); 
    } 

答えて

1

非同期関数の実行方法がわかりません。

このライン:

this.comics.getChar().subscribe((responses: Response) => this.data = responses[1].json().data.results); 

は、この行に進む前に、「仕上げ」しません:

this.comicsList = this.data; // gives undefined 

最初の行が実行を開始し、次の行に関係なく、かどうかのすぐに実行最初の1つは仕上げ。これは非同期実行の性質であり、終了するタイミングがわからないため、それに依存しないものはすべて実行を継続します。しかし、この場合には、あなたの2行目は、明示的応答に依存するので、それはあなたがあなたの回答を得ている唯一の後に実行されるように、あなたはそれを設定する必要があります。

this.comics.getChar().subscribe((responses: Response) => { 
    this.data = responses[1].json().data.results; 
    this.comicsList = this.data; 
}); 

これはあなたの場合を除き、少し冗長ですこのリストへの2つの参照を維持する理由があります。おそらく、comicsListをサブスクライブに直接設定するだけです。

this.comicsList$ = this.comics.getChar().map(responses => responses[1].json().data.results); 

を、私はこのデータを必要とする私のテンプレートで、私は非同期パイプで購読したい:私はおそらくそれさえもしないだろうが、

、私はこれを行うだろう。

<div *ngFor="let comic of comicsList$ | async">{{ comic }}</div> 
関連する問題