私はAngularとRxJSを使ってプロジェクトを書いています。 IはgetRoaster(呼び出したとき)角度の非同期関数の後に戻る
export class AppComponent {
public students : Student[];
constructor(private _rosterService : RosterService) {
this.students = _rosterService.getRoster();
}
}
:しかし、私は(プロバイダとして@Componentに含む)AppComponentのコンストラクタにRosterServiceを注入した後
import {Injectable, Inject} from '@angular/core';
import {Http} from '@angular/http';
import 'rxjs/add/operator/map';
import {Student} from './student.data';
@Injectable()
export class RosterService {
private students : Student[];
constructor(@Inject(Http) private http:Http){}
private getStudents(){
this.http.get('/JSON/students.json')
.map(data => data.json().students)
.subscribe(data => this.students = data);
}
public getRoster() {
this.getStudents();
return this.students;
}
}
:私はこのようなJSONからデータを取得注射クラスを実装しましたgetStudents(async get call)が実行されるまで待機しません。結果で私は未定義の値を得る。
どうすれば対応できますか?レスポンスありがとう。
は私の質問を拡張しました。それは同じではありません。 –
全く同じです。あなたはいくつかのレイヤーを追加しました。 'getRoster'が' getStudents'を同期的に実行するようにします(IOW、 'this.students'を返す前に完了します)。その複製は、それを達成するためにコードを構造化する方法について説明しています。 –