У меня есть куча HTTP-запросов, которые мне нужно отправлять в веб-сервис один за другим.Я не хочу запускать их одновременно, потому что у меня будут проблемы с выполнением такого количества одновременных запросов к сервису.
Я думал, что смогу сделать это с помощью await и асинхронной функции, но кажется, что он все еще не ожидает завершения одного запроса перед другим.Если я запускаю приведенный ниже код, все 50 запросов запускаются так быстро, как мой компьютер может их отправить ...
Я просто неправильно использую обещания?Есть лучший способ сделать это?Я просто стесняюсь вернуться к написанию команды CURL: P.
#!/usr/bin/env node
const [, , ...args] = process.argv
const request = require('request');
const fs = require('fs');
function downloadReport(options){
return new Promise((resolve, reject) => {
console.log("Sending request at " + new Date() );
request(options, function(error,response,body){
if (error) reject(error);
console.log("----------------------------------------------------------------------------------------------------");
console.log("options is " + JSON.stringify (options));
console.log("----------------------------------------------------------------------------------------------------");
console.log("Request Complete at " + new Date() );
resolve(body);
});
});
}//END FUNCTION DOWNLOAD REPORT
async function pullReport(options){
console.log("report pull for " + options.i);
try{
var body = await downloadReport(options);
console.log("Writing out " + options.i + " - report.txt\r\n");
console.log("----------------------------------------------------------------------------------------------------");
fs.writeFile(options.i + " - report.txt", body, function(err) {
if(err) {
return console.log(err);
}
});
}catch(ex){
console.error('ERROR:');
console.error(ex);
}
}//END PULLREPORT FUNCTION
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
const url = "https://www.google.com"
for (var i = 1; i<=50;i++){
var options = {
method: 'GET',
url: url,
i:i
};
console.log("***********************************************************************************************");
pullReport(options);
console.log("***********************************************************************************************");
}//END FOR LOOP