Promise. any()
Zwraca wynik pierwszej spełnionej obietnicy. Odrzuca się dopiero wtedy, gdy zawiodą wszystkie.
- Zwraca
- Obietnicę spełnioną wartością pierwszej udanej obietnicy albo odrzuconą błędem
AggregateError.
Przykład
#const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms))
const fail = (ms, message) =>
new Promise((_, reject) => setTimeout(() => reject(new Error(message)), ms))
const source = await Promise.any([
fail(100, 'Serwer A nie działa'),
wait(300, 'Serwer B'),
wait(200, 'Serwer C')
])
console.log(`Dane z: ${source}`)Definicja i zastosowanie
#Metoda Promise.any() czeka na pierwszy sukces. Błędy pojedynczych obietnic są pomijane, dopóki choć jedna ma szansę się spełnić. To odróżnia ją od Promise.race(), w którym wygrywa także pierwszy błąd.
Jeśli odrzucone zostaną wszystkie obietnice, Promise.any() odrzuca się błędem AggregateError. Ma on pole errors z tablicą wszystkich powodów odrzucenia, ułożonych w kolejności przekazanych obietnic.
Typowe zastosowanie to pobieranie tego samego zasobu z kilku źródeł, na przykład z serwerów zapasowych, i użycie tego, które pierwsze odpowie poprawnie.
Składnia
#Promise.any(iterable)Parametry
#iterable
tablica obietnic
Obietnice, spośród których liczy się pierwszy sukces.
Więcej przykładów
#try {
await Promise.any([
Promise.reject(new Error('Brak sieci')),
Promise.reject(new Error('Serwer w konserwacji'))
])
} catch (error) {
console.log(error.name)
console.log(error.errors.map((e) => e.message))
}const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms))
const fail = (ms, message) =>
new Promise((_, reject) => setTimeout(() => reject(new Error(message)), ms))
const tasks = () => [fail(100, 'Szybki błąd'), wait(200, 'Wolniejszy sukces')]
console.log(await Promise.any(tasks()))
try {
await Promise.race(tasks())
} catch (error) {
console.log(error.message)
}Obsługa przeglądarek
#Szeroko dostępne · od 2020 roku
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Obsługując błąd z
Promise.any(), zajrzyj doerror.errors. Znajdziesz tam przyczyny wszystkich porażek. - Gdy liczy się pierwszy wynik bez względu na to, czy to sukces, czy błąd, użyj
Promise.race().
Powiązane hasła
#- Promise.race()Zwraca obietnicę, która rozstrzyga się tak samo jak pierwsza rozstrzygnięta obietnica z listy: sukcesem albo błędem.
- Promise.all()Czeka na spełnienie wszystkich obietnic i zwraca tablicę ich wyników. Odrzuca się przy pierwszym błędzie.
- Promise.allSettled()Czeka na rozstrzygnięcie wszystkich obietnic i zwraca opis każdego wyniku, zarówno sukcesów, jak i błędów.
- try...catchPrzechwytuje błędy rzucone w bloku try i obsługuje je w catch. Opcjonalny finally wykona się zawsze.
Widzisz błąd albo brakuje przykładu? Napisz do nas.