Sobes.tech
Junior

Na čo je Promise.all?

sobes.tech AI

Odpoveď od AI

Promise.all prijíma iterovateľný objekt sľubov (napríklad pole) a vracia nový sľub. Tento nový sľub je splnený, keď všetky odovzdané sľuby úspešne splnia. Výsledkom bude pole hodnôt, ktoré zodpovedajú výsledkom každého odovzdaného sľubu, v rovnakom poradí.

Ak minimálne jeden z odovzdaných sľubov bude zamietnutý, potom Promise.all hneď zamietne s dôvodom zamietnutia prvého zamietnutého sľubu.

Použitie:

  • Súčasné vykonávanie viacerých asynchrónnych operácií, ktoré na sebe nezávisia.
  • Čakanie na dokončenie sady operácií pred prechodom na ďalší krok.

Príklad:

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

  try {
    // Načítanie dát z viacerých URL naraz
    const responses = await Promise.all(urls.map(url => fetch(url)));

    // Kontrola úspešnosti každej odpovede
    for (const response of responses) {
      if (!response.ok) {
        // Ak jedna odpoveď nie je úspešná, vyhodíme chybu
        throw new Error(`HTTP chyba! stav: ${response.status}`);
      }
    }

    // Parsovanie všetkých odpovedí do JSON
    const jsonData = await Promise.all(responses.map(response => response.json()));

    // Teraz je jsonData pole výsledkov všetkých požiadaviek
    console.log(jsonData);

  } catch (error) {
    // Riešenie chyby, ak bolo niektoré sľub zamietnuté (Fetch alebo JSON.parse)
    console.error('Chyba pri načítaní dát:', error);
  }
}

fetchData();