2012-10-29 9 views
5

Sto iniziando a imparare node.js e ad aggregare più feed RSS in uno solo, sto sfogliando i feed e quindi ricreamo un feed univoco dai dati che ho selezionato.Valore restituito in un async.forOgni nel nodo js?

Quindi, per gestire più richieste http in modo asincrono, utilizzo https://github.com/caolan/async#forEach che esegue il lavoro.

Ma non riesco a capire come restituire un valore (il feed xml rss nel mio caso).

Ecco il mio codice:

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; 
    } 
); 
} 

con console.log(rssFeed) posso vedere i feed RSS, quindi penso che mi manca qualcosa di ovvio.

Come posso restituire il valore rssFeed?

Qualche aiuto per rimettermi in sella sarebbe fantastico, grazie!

Xavier

risposta

8

Non è possibile tornare valore dalla funzione asyncronious. È necessario passarlo nella funzione di callback. In questo modo:

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

Grazie! Ecco l'ovvio che mi mancava! Il mio feed rss funziona ora! grande –

+0

'' item' è dichiarato da qualche parte e chiamato da 'parseAndProcessFeed' che fa qualcosa come' items.push (item) '? –