Met recursie is de code behoorlijk schoon. Wacht tot het http-antwoord terugkomt en start de volgende poging. Dit werkt in alle versies van node.
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);
Een oplossing met beloften zou ook goed werken en is beknopter. Als u bijvoorbeeld een versie van get heeft die een belofte teruggeeft en Node v7.6+, zou je een async/wait-functie kunnen schrijven zoals dit voorbeeld, die enkele nieuwe JS-functies gebruikt.
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);
Opmerking:in beide voorbeelden wordt foutafhandeling overgeslagen, maar dat zou u waarschijnlijk in een productie-app moeten hebben.