Sobes.tech
Junior

Milleks on Promise.all?

sobes.tech AI

Vastus AI-lt

Promise.all võtab vastu iteratiivse objekti lubadustest (näiteks massiiv) ja tagastab uue lubaduse. See uus lubadus täidetakse, kui kõik edastatud lubadused õnnestuvad. Täitmise tulemusena saadakse massiiv väärtustest, mis vastavad iga edastatud lubaduse tulemustele, säilitades sama järjekorra.

Kui vähemalt üks edastatud lubadus lükatakse tagasi, siis Promise.all lükatakse tagasi kohe põhjusega, mis tuleneb esimese tagasi lükatud lubaduse põhjusest.

Rakendused:

  • Mitme asünkroonse operatsiooni samaaegne täitmine, mis ei sõltu üksteisest.
  • Oodata, kuni teatud operatsioonide kogum on lõpetatud, enne järgmise sammu alustamist.

Näide:

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

  try {
    // Laadime andmeid samaaegselt mitmest URL-ist
    const responses = await Promise.all(urls.map(url => fetch(url)));

    // Kontrollime iga vastuse edukust
    for (const response of responses) {
      if (!response.ok) {
        // Kui üks vastustest ei ole edukas, viskame vea
        throw new Error(`HTTP error! status: ${response.status}`);
      }
    }

    // Parsime kõik vastused JSON-iks
    const jsonData = await Promise.all(responses.map(response => response.json()));

    // Nüüd on jsonData massiiv kõigi päringute tulemustest
    console.log(jsonData);

  } catch (error) {
    // Käsitleme viga, kui üks lubadustest lükatakse tagasi (Fetch või JSON.parse)
    console.error('Error fetching data:', error);
  }
}

fetchData();