Назад к вопросам
Junior
70
questionbank

Для чего нужен Promise.all?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Promise.all принимает итерируемый объект промисов (например, массив) и возвращает новый промис. Этот новый промис выполняется, когда все переданные промисы успешно выполняются. Результатом выполнения будет массив значений, соответствующих результатам каждого из переданных промисов, в том же порядке.

Если хотя бы один из переданных ему промисов отклоняется, то Promise.all немедленно отклоняется с причиной отклонения первого отклонившегося промиса.

Применение:

  • Одновременное выполнение нескольких асинхронных операций, которые не зависят друг от друга.
  • Ожидание завершения набора операций перед переходом к следующему шагу.

Пример:

async function fetchData() {
  const urls = [
    'https://api.example.com/data1',
    'https://api.example.com/data2',
    'https://api.example.com/data3',
  ];

  try {
    // Одновременно загружаем данные с нескольких URL
    const responses = await Promise.all(urls.map(url => fetch(url)));

    // Проверяем успешность каждого ответа
    for (const response of responses) {
      if (!response.ok) {
        // Если один из ответов не успешный, выбрасываем ошибку
        throw new Error(`HTTP error! status: ${response.status}`);
      }
    }

    // Парсим все ответы в JSON
    const jsonData = await Promise.all(responses.map(response => response.json()));

    // Теперь jsonData - это массив результатов всех запросов
    console.log(jsonData);

  } catch (error) {
    // Обрабатываем ошибку если один из промисов отклонился (Fetch или JSON.parse)
    console.error('Error fetching data:', error);
  }
}

fetchData();