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.
Przykład
#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}`)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
#Promise.race(iterable)Parametry
#iterable
tablica obietnic
Obietnice, które biorą udział w wyścigu.
Więcej przykładów
#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)
}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ć opcjisignal: 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
#- Promise.any()Zwraca wynik pierwszej spełnionej obietnicy. Odrzuca się dopiero wtedy, gdy zawiodą wszystkie.
- Promise.all()Czeka na spełnienie wszystkich obietnic i zwraca tablicę ich wyników. Odrzuca się przy pierwszym błędzie.
- setTimeout()Uruchamia funkcję jeden raz, po upływie podanej liczby milisekund.
- fetch()Wysyła zapytanie HTTP i zwraca obietnicę z odpowiedzią serwera (obiektem Response).
Widzisz błąd albo brakuje przykładu? Napisz do nas.