Sobes.tech
Junior

За какво е Promise.all?

sobes.tech AI

Отговор от 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 грешка! статус: ${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);
  }
}

fetchData();