Promise. allSettled()
Czeka na rozstrzygnięcie wszystkich obietnic i zwraca opis każdego wyniku, zarówno sukcesów, jak i błędów.
- Zwraca
- Obietnicę, która zawsze się spełnia tablicą obiektów
{ status, value }lub{ status, reason }.
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 results = await Promise.allSettled([
wait(200, 'Ranking załadowany'),
fail(100, 'Czat niedostępny'),
wait(300, 'Odznaki załadowane')
])
for (const result of results) {
if (result.status === 'fulfilled') console.log('OK:', result.value)
else console.log('Błąd:', result.reason.message)
}Definicja i zastosowanie
#Metoda Promise.allSettled() działa podobnie do Promise.all(), ale nigdy nie odrzuca się z powodu pojedynczego błędu. Czeka, aż każda obietnica się spełni albo zostanie odrzucona, i zwraca tablicę obiektów opisujących wynik każdej z nich.
Każdy obiekt ma pole status. Dla sukcesu jest to "fulfilled" razem z polem value, a dla błędu "rejected" razem z polem reason. Kolejność wyników odpowiada kolejności przekazanych obietnic.
Przydaje się, gdy operacje są od siebie niezależne i chcesz wiedzieć, które się udały: wysyłasz kilka powiadomień, zapisujesz postępy w kilku miejscach albo ładujesz widżety, z których każdy może zawieść osobno.
Składnia
#Promise.allSettled(iterable)Parametry
#iterable
tablica obietnic
Obietnice (lub zwykłe wartości), na których rozstrzygnięcie chcesz poczekać.
Więcej przykładów
#const results = await Promise.allSettled([Promise.resolve(10), Promise.reject(new Error('Ups'))])
console.log(results)const results = await Promise.allSettled([
Promise.resolve('Ania'),
Promise.reject(new Error('Brak danych')),
Promise.resolve('Ola')
])
const names = results.filter((r) => r.status === 'fulfilled').map((r) => r.value)
console.log(names)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
#- Po
allSettled()zawsze sprawdzajstatuskażdego wyniku. Sama metoda nie da znać, że coś poszło nie tak. - Jeśli pierwszy błąd ma przerwać całą operację, lepsze jest
Promise.all().
Powiązane hasła
#- Promise.all()Czeka na spełnienie wszystkich obietnic i zwraca tablicę ich wyników. Odrzuca się przy pierwszym błędzie.
- Promise.any()Zwraca wynik pierwszej spełnionej obietnicy. Odrzuca się dopiero wtedy, gdy zawiodą wszystkie.
- Promise.race()Zwraca obietnicę, która rozstrzyga się tak samo jak pierwsza rozstrzygnięta obietnica z listy: sukcesem albo błędem.
- Promise.prototype.catch()Rejestruje funkcję obsługi błędu, wywoływaną, gdy obietnica zostanie odrzucona.
Widzisz błąd albo brakuje przykładu? Napisz do nas.