S rekurzí je kód docela čistý. Počkejte, až se odpověď http vrátí, a poté spusťte další pokus. Toto bude fungovat ve všech verzích uzlu.
var urls = ['http://stackoverflow.com/', 'http://security.stackexchange.com/', 'http://unix.stackexchange.com/'];
var processItems = function(x){
if( x < urls.length ) {
http.get(urls[x], function(res) {
// add some code here to process the response
processItems(x+1);
});
}
};
processItems(0);
Řešení využívající sliby by také fungovalo dobře a je stručnější. Pokud například máte verzi get, která vrací slib a Node v7.6+, můžete napsat funkci async/await, jako je tento příklad, která využívá některé nové funkce JS.
const urls = ['http://stackoverflow.com/', 'http://security.stackexchange.com/', 'http://unix.stackexchange.com/'];
async function processItems(urls){
for(const url of urls) {
const response = await promisifiedHttpGet(url);
// add some code here to process the response.
}
};
processItems(urls);
Poznámka:oba tyto příklady přeskakují zpracování chyb, ale pravděpodobně byste to měli mít v produkční aplikaci.