以下のコードはタグ(文字列)のリストを循環し、情報を取得してからサービスからイメージを取得します。次に、新たに作成され、組み立てられたProductItem
オブジェクトを、現在イメージが格納されている製品の配列にプッシュします。変数のインスタンスがネストされた約束/オブザーバによって参照されています
var toReturn = [];
for (var i in tags){
var productItem: ProductItem= new ProductItem();
self.productService.getInfo(tags[i])
.subscribe(function(info){
productItem.info = info;
self.productService.getImages(tags[i])
.subscribe(function(imageUrls){
productItem.images = imageUrls;
toReturn.push(productItem);
});
});
}
ただし、ここに問題があります。
問題は、toReturn
アレイで完成します。これらはすべて、tags
アレイ内の最後のタグに対応しています。
これはProductItem
の有効範囲と関連している必要があります。私は、タグの最後の要素が最後のproductItem
を作成して以来、未完成の約束/監視のすべてがこの最終的なproductItem
で成し遂げられていると私は彼らが保持すると期待していたproductItem
ではないと思います。
誰もこの問題を回避する方法に関するアイデアはありますか?
http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-実用例 – zakki