как правильно писать http api запрос на node.js что бы получилось синхронно
Всем привет, я новичок на бэкенд разработках и node.js, проблема с которой я столкнулся это асинхронные функции. Моя программа должна работать по порядку, но там есть http запросы которые я зову через циклы.
Здесь я хочу показать идею которую мне надо написать.
var data = [];
function getApi(url_data){
//обычный асинхронный реквест
var http = require("https");
var options = {url_data};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
//собираю данные
data.push(body);
});
});
req.end();
}
console.log("step 1");
for(i=0; i<listOfUrl; i++){
getApi(listOfUrl[i]);
}
console.log("step 2");
/* предпочтительный вывод: step 1
собирать данные
step 2*/
Мой вопрос, как превратить api запрос синхронным?
после многих туториалов я получил что то вроде этого:
/* первый вариант */
var http = require("https");
var options = {/*api данные*/};
function getPromise() {
return new Promise((resolve, reject) => {
http.get(options, (response) => {
let chunks_of_data = [];
response.on('data', (fragments) => {
chunks_of_data.push(fragments);
});
response.on('end', () => {
let response_body = Buffer.concat(chunks_of_data);
resolve(response_body.toString());
});
response.on('error', (error) => {
reject(error);
});
});
});
}
async function makeSynchronousRequest(request) {
try {
let http_promise = getPromise();
let response_body = await http_promise;
console.log(response_body);
}
catch(error) {
console.log(error);
}
}
console.log("step 1");
(async function () {
await makeSynchronousRequest();
console.log("step 2");
})();
console.log("step 3");
/* но ответ все равно step 1, step 3, step 2*/
второй вариант: там он тоже хотел получить api через циклы как я, но в обоих случаях не могу получить синхронно.
Дополнительный вопрос, будет ли правильным решением, получать множество api через циклы (собирать данные), если да то каким методом будет лучше писать программу, что бы работало быстро и без ошибок. (+ примеры, если можно :D).
Буду очень благодарен за ваши ответы, время и примеры! Заранее спасибо!