1
配列の各要素を処理し、要素ごとにHTTP呼び出しを行い、すべての呼び出しが完了したときにUI呼び出しを更新する必要があります。現在、私は次のコード処理中にオブジェクトにアクセスするオブジェクトの配列
for (var singleData of this.someData) {
this._Service.call(singleData.someData).subscribe(
data=> {
this.successGroups.push(singleData);
this.checkState();
},
error=> {
this.failureGroups.push(singleData);
this.checkState();
}
)
}
this._Serviceを持ってAngular2 HTTP呼び出しを行うと、観察を返す単純なサービスです。以下のような目的は以下のとおりです。
- が成功として成功マーク場合はリスト
- の各項目の呼び出しを行い、失敗
- 更新UIなどの障害は、一度すべてのコールは(成功/失敗は重要ではない。)仕上げ
上記のコードの問題は、 "singleData"が更新されるため、誤った値がプッシュされることです。例えば、リストの最初のオブジェクトに対してsubscriberが実行されるまでに、 "singleData"はリストの10番目の項目を指し、10番目の項目は最初の項目の代わりになります。
ハッキングは、singleDataオブジェクトをサービス呼び出しに渡し、これを応答に追加することです。このアプローチが好きではありません。 –
ObservablesやAngularなどとは関係ありません。これは、古典的なfunction-inside-for-loop closureの問題です。 forを試してみましょう。 –