使用Google Feed API的Angular JS - 奇怪的行为

时间:2013-07-21 16:37:21

标签: angularjs google-feed-api

在我的angular.js应用程序中的一个控制器功能中,我正在尝试使用Google的RSS Feed 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];
                }
            }
        });
    }
});

}

1 个答案:

答案 0 :(得分:0)

在项目循环结束后,异步执行回调函数。在循环结束时,i等于2,因为items数组中有2个项目。

有关相同行为的其他示例,请参阅Javascript infamous Loop issue?,有关更深入的说明,请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures#Creating_closures_in_loops.3A_A_common_mistake