Sobes.tech
Junior

За шта је Promise.all?

sobes.tech АИ

Одговор од АИ

Promise.all prihvata iterabilni objekat od obećanja (na primjer, niz) i vraća novo obećanje. Ovo novo obećanje se ispunjava kada sva data obećanja uspešno budu ispunjena. Rezultat će biti niz vrednosti koje odgovaraju rezultatima svakog od datih obećanja, u istom redosledu.

Ako bar jedno od datih obećanja bude odbačeno, onda Promise.all odmah bude odbačeno sa razlogom odbačenog prvog odbačenog obećanja.

Primene:

  • Istovremeno izvršavanje više asinhronih operacija koje se ne zavise jedna od druge.
  • Čekanje na završetak skupa operacija pre prelaska na sledeći korak.

Primer:

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

  try {
    // Učitavanje podataka sa više URL-ova istovremeno
    const responses = await Promise.all(urls.map(url => fetch(url)));

    // Provera uspešnosti svakog odgovora
    for (const response of responses) {
      if (!response.ok) {
        // Ako jedan od odgovora nije uspešan, bacamo grešku
        throw new Error(`HTTP greška! status: ${response.status}`);
      }
    }

    // Parsiranje svih odgovora u JSON
    const jsonData = await Promise.all(responses.map(response => response.json()));

    // Sada je jsonData niz rezultata svih zahteva
    console.log(jsonData);

  } catch (error) {
    // Rukovanje greškom ako je neko obećanje odbačeno (Fetch ili JSON.parse)
    console.error('Greška pri preuzimanju podataka:', error);
  }
}

fetchData();