Sobes.tech
Junior

Czym jest Promise.race?

sobes.tech AI

Odpowiedź od AI

Promise.race — to metoda, która zwraca nową obietnicę. Ta nowa obietnica zostanie rozwiązana lub odrzucona z tą samą wartością (lub przyczyną), co pierwsza obietnica z przekazanego obiektu iterowalnego (zwykle tablicy), która się zakończyła.

Zasady działania:

  1. Wejście: Przyjmuje obiekt iterowalny (np. tablicę) obietnic.
  2. Oczekiwanie: Rozpoczyna "zawody" między wszystkimi obietnicami.
  3. Wynik: Gdy dowolna z obietnic w obiekcie iterowalnym się zakończy (rozwiązana lub odrzucona), Promise.race natychmiast kończy się tym samym wynikiem.
  4. Ignorowanie: Wyniki wszystkich innych obietnic, które zakończyły się później, są całkowicie ignorowane.

Przykład użycia:

// Przykład obietnicy, która zostanie rozwiązana po 1 sekundzie
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Pierwsza'), 1000));

// Przykład obietnicy, która zostanie rozwiązana po 500 milisekundach
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Druga'), 500));

// Przykład obietnicy, która zostanie odrzucona po 300 milisekundach
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Błąd')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // Wyświetli 'Błąd'
  })
  .catch((error) => {
    console.error(error.message); // Obsłuży błąd 'Błąd'
  });

W tym przykładzie promise3 kończy się jako pierwsza (odrzucona), więc Promise.race kończy się błędem, a blok .catch zostanie wykonany. Gdyby promise2 zakończyła się jako pierwsza (np. w 10 ms), to Promise.race rozwiązałoby się wartością 'Druga', a zostałby wykonany blok .then.

Typowe scenariusze użycia:

  • Implementacja limitu czasu dla operacji asynchronicznej.
  • Uzyskanie wyniku z najszybszego źródła danych spośród kilku możliwych.
  • Anulowanie konkurencyjnych operacji asynchronicznych.