2012-10-29 6 views
5

Ich fange an, node.js zu lernen, und um mehrere RSS-Feeds in einem einzigen zu aggregieren, fange ich die Feeds und erstelle dann einen eindeutigen Feed aus den Daten, die ich erstellt habe.Rückgabewert in einem async.forEach in Knoten js?

Also, um mehrere HTTP-Anfragen asynchron zu behandeln, verwende ich https://github.com/caolan/async#forEach, die den Job erledigt.

Aber ich kann nicht herausfinden, wie man einen Wert zurückgibt (der rss xml feed in meinem Fall).

Hier ist mein Code:

function aggregate(topic) { 
    async.forEach(topic.feeds, 
    function(item, callback) { 
     parseAndProcessFeed(item, callback); 
    }, 
    function(err) { 
     // sort items by date 
     items.sort(function(a, b) { 
     return (Date.parse(b.date) - Date.parse(a.name)); 
     }); 
     var rssFeed = createAggregatedFeed(); 
     console.log(rssFeed); 
     return rssFeed; 
    } 
); 
} 

mit console.log(rssFeed) kann ich den RSS-Feed sehen, so dass ich glaube, ich bin etwas fehlt offensichtlich.

Wie kann ich den rssFeed Wert zurückgeben?

Einige Hilfe, um mich wieder auf Platz zu bringen wäre toll, danke!

Xavier

Antwort

8

Sie können nicht Wert von asyncronious Funktion zurück. Sie müssen es in Callback-Funktion übergeben. Gefällt mir:

function aggregate(topic, callback) { 
    async.forEach(topic.feeds, 
    function(item, callback) { 
     parseAndProcessFeed(item, callback); 
    }, 
    function(err) { 
     // sort items by date 
     items.sort(function(a, b) { 
     return (Date.parse(b.date) - Date.parse(a.name)); 
     }); 
     var rssFeed = createAggregatedFeed(); 
     callback(err, rssFeed); 
    } 
); 
} 

aggregate(someTopic, function(err, result) { 
    // here is result of aggregate 
}); 
+0

Danke! Hier ist das Offensichtliche, das ich vermisste! Mein RSS-Feed funktioniert jetzt! Großartig –

+0

Ist 'Elemente' irgendwo deklariert und wird innerhalb von' parseAndProcessFeed' aufgerufen, was so etwas wie 'items.push (Element)'? –