Med rekursion är koden ganska ren. Vänta tills http-svaret kommer tillbaka och avfyra sedan nästa försök. Detta kommer att fungera i alla versioner av 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);
En lösning med löften skulle också fungera bra och är mer kortfattad. Om du till exempel har en version av get som ger ett löfte och Node v7.6+, kan du skriva en async/await-funktion som det här exemplet, som använder några nya JS-funktioner.
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);
Obs:båda dessa exempel hoppar över felhantering, men du borde förmodligen ha det i en produktionsapp.