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 }.
Na tej stronie

Przykład

#
JavaScript
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)
}
Konsola
OK: Ranking załadowany
Błąd: Czat niedostępny
OK: Odznaki załadowane

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

#
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

#
Kształt wyników
JavaScript
const results = await Promise.allSettled([Promise.resolve(10), Promise.reject(new Error('Ups'))])
console.log(results)
Konsola
[{ status: 'fulfilled', value: 10 }, { status: 'rejected', reason: Error: Ups }]
Tylko udane wyniki
JavaScript
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)
Konsola
['Ania', 'Ola']

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 sprawdzaj status każ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

#

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