0

以下のように、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 配列はおそらく将来もっと長くなるので、コピーして貼り付けたくないです。ループでこれを達成する方法はありますか?

4

2 に答える 2