2017-11-08 27 views
0

私は次のコードにいくつかの助け受け取りたい:私はDataAssociationオブジェクトにDataAssociationIDSの配列を変換しようとしています上記のコードでは角度4連鎖のHTTP GETリクエスト(約束)

fillDataAssociationsArray(DataAssociationIDS: string[]) { 
const promise = new Promise((resolve, reject) => { 
    for (const id of DataAssociationIDS) { 
    this.api.getDataAssociationByID(id).toPromise().then(
     data => { 
     this.DataAssociations.push(data.body.entities.DATAASSOCIATIONS[0]); 
     }); 
    } 
    resolve(); 
}); 

return promise;} 

を、そしてよりそれらをDataObjects []のローカル配列にプッシュします。私は配列(パラメータ)からIDを持つ各DataObjectを取得し、バックエンドから正しいDataObjectを返すAPIへのget Requestを実行するよりも、

public getDataAssociationByID(dataAssociationID: string) { 
return this.http.get<DataAssociationInterface>(this.apiURL + 'typeOne=DATAASSOCIATIONS&id=' + dataAssociationID, 
{ observe: 'response' });} 

私はいくつかのHTTPは私のAPIからの要求、各要求が前の要求の結果に依存を取得チェーンにしたいです。だから私の考えは、これらの要求を約束し、then()メソッドを次のように使用することでした:firstRequest()。then(SecondRequest()。then(...))など。

ngOnInit() { 
    this.fillDataAssociationsArray(this.extractDataAssociationIdsFromActivities()).then(
() => console.log(this.DataAssociations) 
    //() => console.log(this.DataAssociations[0].languages.DUT.name) 
);} 

First result Second line result

次いで()のこの最初の行を試みるマイ - 私は第二行(コメント)をしようとするブロックが、しかし、正しい結果のローカル配列を印刷しました定義されていない項目の名前を出力する???そして、次のリクエストをチェーンすると、明らかに定義されていない読み込みができなくなります。

答えて

0

ここでは非同期問題があると思います。

http getコールから結果を得る前に、あなたの約束を解決している可能性があります。

私はこの問題を解決する最善の方法は、idsの配列を取り、結果の配列を返すためにAPIコールを追加することだと思います。しかし、このユースケースのために私のアプローチは次のようになります。

fillDataAssociationsArray(DataAssociationIDS: string[]) { 
 
const promise = new Promise((resolve, reject) => { 
 
    for (const id of DataAssociationIDS) { 
 
    this.api.getDataAssociationByID(id).toPromise().then(
 
     data => { 
 
     this.DataAssociations.push(data.body.entities.DATAASSOCIATIONS[0]); 
 
     if (this.DataAssociations.length === DataAssociationIDS.length) { 
 
      resolve(); 
 
     } 
 
     }); 
 
    } 
 
}); 
 

 
return promise;}

+0

あなたの先生はヒーローです! if文が問題を解決し、実際にすべての呼び出しが実行される前にPromiseが解決されました。 –

+0

恐ろしい!お力になれて、嬉しいです :) –

関連する問題