2016-08-29 11 views
0

私はgoogle API用のサービスを作成し、約束の応答で積み重ねました。私はあなたに私のコードをお見せしましょう:角度2の約束を理解しようとしています

getPromise: Promise<any>; 
loadSheets: Array<any>; 

constructor(public _checkAuthApiService: CheckAuthApiService) { } 

ngOnInit() { 
    if (this._checkAuthApiService) { 
     this._checkAuthApiService.checkAuth().then(res => { 
      if (res && !res.error) { 
       this.loadSheetsFunc(); 
      } 
     }); 
    } 

    //setTimeout(function(){},1000); //When i add this it works :(
} 

loadSheetsFunc =() => { 
    this.getPromise = new Promise((resolve: any, reject: any) => { 
     resolve(this._checkAuthApiService.loadSheetsApi()) 
    }); 
    this.getPromise.then((res: any) => this.sheetsResults(res)); 
}; 

sheetsResults = (res: any) => this.loadSheets = res.result.values; 

ない私が行方不明ですが、私はngOnInitseTimeoutを追加するときに、TIは私がビューに必要なデータを取得するどのような作品にしてください。誰かがこのコードを手伝ったり、Observablesを使ってよりよい方法を提案したりできますか?前もって感謝します。

+1

'this._checkAuthApiService.loadSheetsApi'とは何ですか? –

+0

ポリフェルを使用していますか? –

+0

this._checkAuthApiService.loadSheetsApiはgoogle apiからシートデータを返しています。最後に、res.result.valuesには必要なデータが含まれていますが、非同期呼び出しはデータが後で利用できるので、上記のsetTimeoutを使ってテストしています。問題は適切に発射されていない、または何かが欠けているという約束の呼び出しに残っています。 – itismelito

答えて

0

setTimeout()は、Angular2が完全に更新されたプロパティを認識する理由です。

Angular2は更新を認識しませんsetTimeout()は、ポリフィル(おそらく読み込み順序)に問題があることを示します。

私はあなたのコード

loadSheets: Array<any>; 

constructor(public _checkAuthApiService: CheckAuthApiService) { } 
ngOnInit() { 
    if (this._checkAuthApiService) { 
     this._checkAuthApiService.checkAuth().then(res => { 
      if (res && !res.error) { 
       this.loadSheetsFunc(); 
      } 
     }); 
    } 
} 

loadSheetsFunc() { 
    this._checkAuthApiService.loadSheetsApi() 
    subscribe(val => this.sheetsResults(res)); 
} 

sheetsResults(res: any) { 
    this.loadSheets = res.result.values; 
} 

にいくつかの変更をするだろう、私は何loadSheetsApi()リターン(Observableを想定)ものの知りません。

関連する問題