Вызов асинхронной функции из функционального map в JavaScript, как? Есть массив объектов. Хочется для него выполнить map делая HTTP запрос для каждого объекта и возвращая новый объект-ответ. Как это сделать, если для HTTP запросов используется модуль http из Node.js, который выполняет вызов асинхронно?
Для выполнения асинхронных операций внутри функции map в JavaScript, можно воспользоваться асинхронными функциями (async/await) или промисами. В случае использования модуля http из Node.js, следует использовать функции, которые возвращают промисы (например, http.get) и использовать async/await или then/catch для обработки результатов.
Ниже приведен пример реализации данной задачи с использованием Promise:
В данном примере функция fetchData выполняет асинхронный HTTP запрос для каждого объекта из массива и возвращает промис с результатом. Функция fetchAllData использует метод Promise.all для запуска всех запросов параллельно и дожидается завершения всех запросов. Результат обработки асинхронных вызовов выводится в консоль.
Для выполнения асинхронных операций внутри функции map в JavaScript, можно воспользоваться асинхронными функциями (async/await) или промисами. В случае использования модуля http из Node.js, следует использовать функции, которые возвращают промисы (например, http.get) и использовать async/await или then/catch для обработки результатов.
Ниже приведен пример реализации данной задачи с использованием Promise:
const http = require('http');const dataArray = [{ id: 1, data: 'data1' }, { id: 2, data: 'data2' }];
const fetchData = (data) => {
return new Promise((resolve, reject) => {
http.get(`http://example.com/${data.id}`, (res) => {
let responseData = '';
res.on('data', (chunk) => {
responseData += chunk;
});
res.on('end', () => {
resolve({ id: data.id, responseData });
});
}).on('error', (error) => {
reject(error);
});
});
};
const fetchAllData = async (dataArray) => {
const resultArray = await Promise.all(dataArray.map(data => fetchData(data)));
return resultArray;
};
fetchAllData(dataArray)
.then(result => {
console.log(result);
})
.catch(error => {
console.error(error);
});
В данном примере функция fetchData выполняет асинхронный HTTP запрос для каждого объекта из массива и возвращает промис с результатом. Функция fetchAllData использует метод Promise.all для запуска всех запросов параллельно и дожидается завершения всех запросов. Результат обработки асинхронных вызовов выводится в консоль.