angular.js アプリケーションのコントローラー関数の 1 つで、Google の RSS フィード API を使用してフィード エントリを取得し、scope.items モデルに入力しようとしています。
最も内側の部分のコンソール出力は常に「2」ですが、最も外側のループのコンソール出力は「0」と「1」です(これはアイテム配列の長さであるため、これは正しいです)。
Google API が非同期リクエストであり、それを操作しようとする前に完了していないことに関係があるのではないかと考えています (?)。ただし、イテレータ変数が「2」になることはまだ意味がありません!
コード:
function ItemListCtrl($scope, Item) {
$scope.items = Item.query({}, function() { // using a JSON service
for (var i = 0; i < $scope.items.length; i++) { // the length is 2 here.
$scope.items[i].entries = [];
console.log(i); // gives '0' and '1' as output in the iterations.
var feed = new google.feeds.Feed($scope.items[i].feedUrl);
feed.load(function(result) {
console.log(i); // gives '2' as output in both the iterations.
if (!result.error) {
for (var j = 0; j < result.feed.entries.length; j++) {
$scope.items[i].entries[j] = result.feed.entries[j];
}
}
});
}
});
}