我正在尝试遍历一系列 RSS 提要,如下所示:
var rssFeeds = [ ['http://www.huffingtonpost.com/tag/womens-rights/feed/', "Huffington Post"], ['http://abcnews.go.com/topics/urss?pageid=681900', "ABC News"], ['http://www.globalissues.org/news/topic/166/feed', "Global Issues"], ['http://topics.nytimes.com/top/reference/timestopics/subjects/f/feminist_movement/index.html?rss=1', "The New York Times"] ];
该数组既包含提要的位置,也包含提要名称的字符串。我使用下面的 for 循环遍历数组,其中 i 作为迭代器。
收到结果后,我使用 for 循环 j 遍历回调函数中的结果。我将每个获取的结果附加到另一个数组 entryArray,并在附加每个结果之后,使用 RSS 提要的名称向该获取的结果添加一个新属性“源”。
function loadEntries()
{
var feedr = new Array();
for( var i = 0; i < rssFeeds.length; i++ )
{
feedr[i] = new google.feeds.Feed( rssFeeds[i][0] );
feedr[i].setNumEntries(loadAmount);
feedr[i].load(function(result) {
if (!result.error) {
console.log(i);
for (var j = 0; j < result.feed.entries.length; j++) {
entryArray[entryArray.length] = result.feed.entries[j];
entryArray[entryArray.length - 1]['source'] = rssFeeds[i][1];
}
}
});
}
}
但是,这就是问题出现的地方,我使用 (i) 来指示要追加的名称的迭代器始终等于 rssFeeds.length,因为所有四个加载命令的回调函数都发生在初始 for 循环已经完成迭代之后. console.log(i); 你看到总是返回 4。
这在我单独复制和粘贴每个项目的代码时有效,但我宁愿不复制和粘贴,因为 RSSFeeds 数组将来可能会更长。有什么办法可以通过循环来完成吗?