Sobes.tech
Junior

Wyjaśnij, czym jest Promise.race i jak jest używany w JavaScript.

sobes.tech AI

Odpowiedź od AI

Promise.race przyjmuje obiekt iterowalny promes i zwraca nową promesę. Ta nowa promesa zostanie rozwiązana lub odrzucona tak szybko, jak tylko pierwsza promesa w obiekcie iterowalnym zostanie rozwiązana lub odrzucona. Wynikiem nowej promesy będzie wynik lub przyczyna odrzucenia pierwszej zakończonej promesy.

Używa się do:

  • Wybrania najszybszej odpowiedzi spośród kilku operacji asynchronicznych.
  • Implementacji limitów czasowych dla operacji asynchronicznych.

Przykład limitu czasowego:

// Funkcja tworząca promesę, która odrzuca się po określonym czasie
function timeout(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error(`Timeout after ${ms}ms`));
    }, ms);
  });
}

// Operacja asynchroniczna, która może być wolna
function fetchData() {
  return new Promise(resolve => {
    // Symulacja długiej operacji
    setTimeout(() => {
      resolve('Dane pobrane pomyślnie');
    }, 2000); // Załóżmy, że ta operacja trwa 2 sekundy
  });
}

// Użycie Promise.race do dodania limitu czasowego do fetchData
Promise.race([
  fetchData(),  // Nasza operacja
  timeout(1000) // Limit czasowy 1 sekundy
])
.then(result => {
  console.log(result); // Wykona się, jeśli fetchData zakończy się przed limitem
})
.catch(error => {
  console.error(error.message); // Wykona się, jeśli limit zostanie przekroczony jako pierwszy
});