Sobes.tech
Junior

Spiega cos'è Promise.race e come viene utilizzato in JavaScript.

sobes.tech AI

Risposta dell'AI

Promise.race accetta un oggetto iterabile di promesse e restituisce una nuova promessa. Questa nuova promessa si risolve o si rifiuta non appena la prima promessa nell'oggetto iterabile si risolve o si rifiuta. Il risultato della nuova promessa sarà il risultato o la ragione del rifiuto della prima promessa completata.

Utilizzato per:

  • Scegliere la risposta più rapida tra più operazioni asincrone.
  • Implementare timeout per operazioni asincrone.

Esempio di timeout:

// Funzione che crea una promessa che si rifiuta dopo un certo tempo
function timeout(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error(`Timeout after ${ms}ms`));
    }, ms);
  });
}

// Operazione asincrona che può essere lenta
function fetchData() {
  return new Promise(resolve => {
    // Simulazione di un'operazione lunga
    setTimeout(() => {
      resolve('Dati recuperati con successo');
    }, 2000); // Supponiamo che questa operazione duri 2 secondi
  });
}

// Uso di Promise.race per aggiungere un timeout a fetchData
Promise.race([
  fetchData(),  // La nostra operazione
  timeout(1000) // Timeout di 1 secondo
])
.then(result => {
  console.log(result); // Si eseguirà se fetchData termina prima del timeout
})
.catch(error => {
  console.error(error.message); // Si eseguirà se il timeout si verifica per primo
});