Sobes.tech
Junior

A cosa serve Promise.all?

sobes.tech AI

Risposta dell'AI

Promise.all accetta un oggetto iterabile di promesse (ad esempio, un array) e restituisce una nuova promessa. Questa nuova promessa si risolve quando tutte le promesse passate si risolvono con successo. Il risultato sarà un array di valori, corrispondenti ai risultati di ciascuna delle promesse passate, nello stesso ordine.

Se almeno una delle promesse passate viene rifiutata, allora Promise.all viene rifiutata immediatamente con la ragione del rifiuto della prima promessa rifiutata.

Applicazioni:

  • Esecuzione simultanea di più operazioni asincrone che non dipendono l'una dall'altra.
  • Attendere il completamento di un insieme di operazioni prima di passare al passo successivo.

Esempio:

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

  try {
    // Caricare dati da più URL contemporaneamente
    const responses = await Promise.all(urls.map(url => fetch(url)));

    // Verificare il successo di ogni risposta
    for (const response of responses) {
      if (!response.ok) {
        // Se una risposta non ha successo, lanciare un errore
        throw new Error(`Errore HTTP! stato: ${response.status}`);
      }
    }

    // Analizzare tutte le risposte in JSON
    const jsonData = await Promise.all(responses.map(response => response.json()));

    // jsonData ora è un array dei risultati di tutte le richieste
    console.log(jsonData);

  } catch (error) {
    // Gestire l'errore se una delle promesse viene rifiutata (Fetch o JSON.parse)
    console.error('Errore nel recupero dei dati:', error);
  }
}

fetchData();