2016-07-20 16 views
0

私はAngularとRxJSを使ってプロジェクトを書いています。 IはgetRoaster(呼び出したとき)Angular 2 injectable非同期実行

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)が実行されるまで待機しません。結果で私は未定義の値を得る。

どうすれば対応できますか?レスポンスありがとう。

答えて

0

あなたはこの

getRoster(): Observable<Student[]>{ 
     return this.http.get('/JSON/students.json') 
      .map(data => data.json().students); 
    } 

ようObservable<Student[]> from the getRoster`方法を返却して、またapp component

export class AppComponent { 
    public students : Student[]; 
    constructor(private _rosterService : RosterService) { 
     _rosterService.getRoster().subscribe(students => this.students = students); 
    } 
} 

に結果を購読する必要があり、ngOnInitでサービスを呼び出す方が良いですOnInitインターフェイスを実装します。

+0

ありがとうございます!できます! – user6616026

関連する問題