С рекурсия кодът е доста чист. Изчакайте HTTP отговорът да се върне, след което стартирайте следващия опит. Това ще работи във всички версии на 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);
Решение, използващо обещания, също би работило добре и е по-кратко. Например, ако имате версия на get, която връща обещание и Node v7.6+, можете да напишете функция async/await като този пример, която използва някои нови функции на 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);
Забележка:и двата примера пропускат обработката на грешки, но вероятно трябва да имате това в производствено приложение.