Với đệ quy, mã khá sạch. Chờ phản hồi http quay trở lại rồi thực hiện lần thử tiếp theo. Điều này sẽ hoạt động trong tất cả các phiên bản của nút.
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);
Một giải pháp sử dụng các lời hứa cũng sẽ hoạt động tốt và ngắn gọn hơn. Ví dụ:nếu bạn có phiên bản get trả về một lời hứa và Node v7.6 +, bạn có thể viết một hàm async / await như ví dụ này, sử dụng một số tính năng JS mới.
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);
Lưu ý:cả hai ví dụ này đều bỏ qua việc xử lý lỗi, nhưng bạn có thể phải xử lý lỗi đó trong ứng dụng sản xuất.