以下のように、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"] ];
この配列には、フィードの場所とフィードの名前を含む文字列の両方が含まれています。以下のように、i を反復子として持つ for ループを使用して、配列を反復処理します。
結果を受け取ったら、for ループ j を使用して、コールバック関数で結果を反復処理します。フェッチした各結果を別の配列 entryArray に追加し、各結果を追加した後、RSS フィードの名前を使用して、そのフェッチした結果に新しい属性「source」を追加します。
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 ループの反復が既に終了した後に、4 つのロード コマンドすべてのコールバック関数が発生するためです。 . console.log(i); 常に 4 が返されます。
これは、各アイテムのコードを個別にコピーして貼り付けたときに機能しましたが、RSSFeeds 配列はおそらく将来もっと長くなるので、コピーして貼り付けたくないです。ループでこれを達成する方法はありますか?