Sobes.tech
Junior

Na co je Promise.all?

sobes.tech AI

Odpověď od AI

Promise.all přijímá iterovatelný objekt slibů (například pole) a vrací nový slib. Tento nový slib je splněn, když všechny předané sliby úspěšně splní. Výsledkem bude pole hodnot odpovídajících výsledkům každého z předaných slibů, ve stejném pořadí.

Pokud alespoň jeden z předaných slibů bude zamítnut, pak Promise.all okamžitě zamítne s důvodem zamítnutí prvního zamítnutého slibu.

Použití:

  • Současné provádění několika asynchronních operací, které na sobě nezávisí.
  • Čekání na dokončení sady operací před přechodem na další krok.

Příklad:

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

  try {
    // Načítání dat z více URL současně
    const responses = await Promise.all(urls.map(url => fetch(url)));

    // Kontrola úspěšnosti každé odpovědi
    for (const response of responses) {
      if (!response.ok) {
        // Pokud jedna odpověď není úspěšná, vyhoďte chybu
        throw new Error(`HTTP chyba! stav: ${response.status}`);
      }
    }

    // Parsování všech odpovědí do JSON
    const jsonData = await Promise.all(responses.map(response => response.json()));

    // nyní je jsonData pole výsledků všech požadavků
    console.log(jsonData);

  } catch (error) {
    // Zpracování chyby, pokud bylo některé slib zamítnuto (Fetch nebo JSON.parse)
    console.error('Chyba při načítání dat:', error);
  }
}

fetchData();