Promise.race()

Zwraca obietnicę, która rozstrzyga się tak samo jak pierwsza rozstrzygnięta obietnica z listy: sukcesem albo błędem.

Zwraca
Obietnicę z wynikiem lub błędem pierwszej rozstrzygniętej obietnicy.
Na tej stronie

Przykład

#
JavaScript
const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms))

const winner = await Promise.race([wait(300, 'Kuba'), wait(100, 'Ania'), wait(200, 'Ola')])

console.log(`Pierwsza odpowiedź: ${winner}`)
Konsola
Pierwsza odpowiedź: Ania

Definicja i zastosowanie

#

Metoda Promise.race() urządza wyścig obietnic. Zwrócona obietnica przyjmuje wynik tej, która rozstrzygnie się jako pierwsza, bez względu na to, czy będzie to sukces, czy błąd. Pozostałe obietnice działają dalej, ale ich wyniki są ignorowane.

Najpopularniejsze zastosowanie to limit czasu. Ścigasz właściwą operację z obietnicą, która po kilku sekundach zostaje odrzucona. Jeśli operacja nie zdąży, dostajesz błąd przekroczenia czasu zamiast czekać w nieskończoność.

Pusta tablica daje obietnicę, która nigdy się nie rozstrzygnie. Jeśli interesuje Cię pierwszy sukces, a błędy mają być pomijane, użyj Promise.any().

Składnia

#
Składnia
Promise.race(iterable)

Parametry

#
  • iterable

    tablica obietnic

    Obietnice, które biorą udział w wyścigu.

Więcej przykładów

#
Limit czasu dla operacji
JavaScript
const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms))
const timeout = (ms) =>
  new Promise((_, reject) => setTimeout(() => reject(new Error('Przekroczono czas')), ms))

try {
  const data = await Promise.race([wait(800, 'dane z serwera'), timeout(300)])
  console.log(data)
} catch (error) {
  console.log(error.message)
}
Konsola
Przekroczono czas

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Do limitu czasu dla zapytań fetch() wygodniej użyć opcji signal: AbortSignal.timeout(ms), która dodatkowo przerywa samo zapytanie.
  • Pamiętaj, że przegrane obietnice nie są anulowane. Ich operacje, np. zapytania do serwera, nadal się wykonują.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.