Вопрос проверяет умение эффективно выполнять несколько HTTP-запросов одновременно, что критично для производительности современных веб-приложений.
В современных веб-приложениях часто требуется получать данные из нескольких независимых источников (например, API пользователя, API новостей и API погоды). Выполнение этих запросов последовательно создаёт ненужные задержки, так как каждый запрос ждёт окончания предыдущего. Параллельное выполнение позволяет отправить все запросы почти одновременно и обработать результаты, когда они все будут готовы, что сокращает общее время ожидания.
Стандартный способ в современном JavaScript — использовать Promise.all(). Этот метод принимает итерируемую коллекцию промисов (например, массив) и возвращает новый промис, который выполнится, когда все переданные промисы завершатся, или отклонится, если хотя бы один из промисов будет отклонён.
async function fetchMultipleUrls(urls) {
// Создаём массив промисов-запросов
const fetchPromises = urls.map(url => fetch(url));
try {
// Запускаем все запросы параллельно и ждём результаты
const responses = await Promise.all(fetchPromises);
// Декодируем тела ответов (также параллельно)
const data = await Promise.all(
responses.map(response => response.json())
);
return data;
} catch (error) {
console.error('Один из запросов завершился ошибкой:', error);
throw error;
}
}
// Использование
const apiEndpoints = [
'https://api.example.com/users/1',
'https://api.example.com/posts',
'https://api.example.com/weather'
];
fetchMultipleUrls(apiEndpoints).then(results => {
console.log('Все данные получены:', results);
});Если важно получить результаты даже для частично неудачных запросов, используйте Promise.allSettled(). Он всегда завершается успешно, возвращая массив объектов с статусом (fulfilled или rejected) и значением или причиной ошибки.
const promises = [
fetch('https://api.example.com/good'),
fetch('https://api.example.com/bad-endpoint'), // Может вернуть 404
fetch('https://api.example.com/another')
];
const results = await Promise.allSettled(promises);
const successfulData = results
.filter(result => result.status === 'fulfilled')
.map(result => result.value);Вывод: Используйте Promise.all() для параллельного выполнения независимых HTTP-запросов, когда нужны результаты всех операций и ошибка в одном из них должна прервать весь процесс. Если требуется более устойчивая обработка с сохранением частичных результатов, выбирайте Promise.allSettled(). Этот подход является фундаментальным для создания отзывчивых и быстрых веб-приложений.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Java Developer в телеграм