Вопрос проверяет понимание работы с асинхронными операциями в JavaScript, особенно умение выполнять несколько запросов одновременно и обрабатывать их результаты.
В современной веб-разработке часто возникает необходимость выполнить несколько независимых асинхронных операций (например, запросы к API) одновременно, чтобы сократить общее время ожидания. JavaScript предоставляет для этого несколько инструментов, самым базовым и распространённым из которых является Promise.all().
Этот статический метод принимает итерируемую коллекцию (чаще всего массив) промисов и возвращает один новый промис. Этот новый промис будет выполнен (fulfilled) только тогда, когда все промисы в массиве будут успешно выполнены. Его результатом будет массив результатов каждого из промисов в том же порядке, в котором они были переданы. Если же хотя бы один из промисов будет отклонён (rejected), то и промис от Promise.all() немедленно отклонится с причиной ошибки первого отклонённого промиса.
Представим, что нам нужно получить данные о пользователе и его постах с JSONPlaceholder API.
async function fetchUserAndPosts(userId) {
const userPromise = fetch(`https://jsonplaceholder.typicode.com/users/${userId}`);
const postsPromise = fetch(`https://jsonplaceholder.typicode.com/posts?userId=${userId}`);
try {
// Оба запроса запускаются параллельно
const [userResponse, postsResponse] = await Promise.all([userPromise, postsPromise]);
const user = await userResponse.json();
const posts = await postsPromise.json();
console.log('User:', user.name);
console.log('Number of posts:', posts.length);
return { user, posts };
} catch (error) {
console.error('One of the requests failed:', error);
}
}
fetchUserAndPosts(1);Иногда требуется более гибкое управление:
Параллельные запросы критически важны для оптимизации производительности фронтенда. Они используются при:
Вывод: Используйте Promise.all() для параллельного выполнения независимых асинхронных операций, когда вам нужны результаты всех из них. Это стандартный и эффективный паттерн для сокращения времени ожидания в веб-приложениях.