Sobes.tech
Junior

Cos'è Promise.race?

sobes.tech AI

Risposta dell'AI

Promise.race — è un metodo che restituisce una nuova promessa. Questa nuova promessa si risolve o si rifiuta con lo stesso valore (o motivo) della prima promessa dell'oggetto iterabile passato (di solito un array) che si completa.

Principi di funzionamento:

  1. Ingresso: Accetta un oggetto iterabile (ad esempio, un array) di promesse.
  2. Attesa: Inizia una "competizione" tra tutte le promesse.
  3. Risultato: Non appena una qualsiasi delle promesse nell'oggetto iterabile si completa (risolta o rifiutata), Promise.race si conclude istantaneamente con lo stesso risultato.
  4. Ignorare: I risultati di tutte le altre promesse che si completano successivamente vengono completamente ignorati.

Esempio di utilizzo:

// Esempio di una promessa che si risolve dopo 1 secondo
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Primo'), 1000));

// Esempio di una promessa che si risolve dopo 500 millisecondi
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Secondo'), 500));

// Esempio di una promessa che viene rifiutata dopo 300 millisecondi
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Errore')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // Mostrerà 'Errore'
  })
  .catch((error) => {
    console.error(error.message); // Gestisce l'errore 'Errore'
  });

In questo esempio, promise3 si completa per primo (viene rifiutata), quindi Promise.race si conclude con un errore, e viene eseguito il blocco .catch. Se promise2 si fosse completata per prima (ad esempio, in 10 ms), allora Promise.race si sarebbe risolta con il valore 'Secondo', e si sarebbe eseguito il blocco .then.

Scenari di utilizzo tipici:

  • Implementazione di un timeout per un'operazione asincrona.
  • Ottenere il risultato dalla fonte di dati più veloce tra più possibili.
  • Annullare operazioni asincrone concorrenti.