Sobes.tech
Junior

Kam ir paredzēts Promise.all?

sobes.tech AI

Atbilde no AI

Promise.all pieņem iterējamu objektu ar solījumiem (piemēram, masīvu) un atgriež jaunu solījumu. Šis jauns solījums izpildās, kad visi nodotie solījumi veiksmīgi izpildās. Izpildes rezultāts būs masīvs ar vērtībām, kas atbilst katra nodotā solījuma rezultātiem, saglabājot to pašu kārtību.

Ja vismaz viens no nodotajiem solījumiem tiek noraidīts, tad Promise.all uzreiz noraida ar noraidījuma iemeslu pirmajam noraidītajam solījumam.

Pielietojums:

  • Vienlaicīga vairāku asenhronisku operāciju izpilde, kas nav savstarpēji atkarīgas.
  • Gaidīt, līdz tiek pabeigts noteikts operāciju kopums, pirms pāriet uz nākamo soli.

Piemērs:

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

  try {
    // Vienlaicīgi ielādē datus no vairākiem URL
    const responses = await Promise.all(urls.map(url => fetch(url)));

    // Pārbauda katra atbildes veiksmīgumu
    for (const response of responses) {
      if (!response.ok) {
        // Ja viena no atbildēm nav veiksmīga, izmet kļūdu
        throw new Error(`HTTP error! status: ${response.status}`);
      }
    }

    // Pārvērš visas atbildes JSON formātā
    const jsonData = await Promise.all(responses.map(response => response.json()));

    // Tagad jsonData ir masīvs ar visiem pieprasījumu rezultātiem
    console.log(jsonData);

  } catch (error) {
    // Apstrādā kļūdu, ja viens no solījumiem noraidās (Fetch vai JSON.parse)
    console.error('Error fetching data:', error);
  }
}

fetchData();