2016-10-31 4 views
3

私はTypeScriptを使用して角度2を学習しています。これまでのところ私はAPIサービスを使用しました。HTTPはメソッドを使用して、observablesを使用してjsonデータを取得します。すべて正常に動作しています。私のビューでデータを使用することはできますが、私はコンポーネント内のデータを使用することもできますが、をgetData()メソッドにサブスクライブしている間にのみです。角度2のTSオブジェクト配列は、サービスに加入している間のみ定義されます


それはなぜだと私は簡単な反復と管理のための私のコンポーネントのすべてのメソッドにオブジェクト配列を利用可能にするために、他のどのような可能性を持っているのですか?

例コンポーネント:

export class SomeComponent implements OnInit { 

    public someData: DataObject[]; 

    public constructor(private service: SomeService) {} 

    public ngOnInit(): void { 
    this.loadData(); 
    this.useData(); 
    } 

    private loadData(): void { 
    this.service.getData().subscribe(data=> { 
     this.someData = data; 

     this.someData.forEach(dataObject => { 
     // this works fine 
     }); 
    }); 
    } 

    private useData(): void { 
    this.someData.forEach(dataObject => { 
     // dataObject is (of type?) undefined, why? 
    }); 
    } 

} 

答えて

3

HTTP呼び出しは非同期であるため、それはです。 this.useData();は、完了するためにthis.loadData();を待つことはありません。これはうまくいくはずです:

private loadData(): void { 
    this.service.getData().subscribe(data=> { 
     this.someData = data; 

     this.useData(); 
    }); 
    } 
+0

お返事ありがとうございます。 loadDataメソッドを何とか同期させることはできますか?私はオブジェクトの2つの異なる配列をロードする2つのメソッドがあり、ロードされた後、すぐに両方の配列を繰り返し処理する必要があります。私は1つの方法でそれらを読み込むことによってそれらを混在させたくないです。 – Robin

+0

改訂:後でメソッドを呼び出すためにデータがロードされるのを待って確認できますか? – Robin

+1

いつか私はそれについてすぐに研究しましたが、私が知っている限り、非同期関数を待つ方法はありません。コールバック関数でロジックを実装することを意図しています。物事が変わったかどうかは、Googleに見たいかもしれません。 – Sefa

関連する問題