Promise.prototype.catch()

Rejestruje funkcję obsługi błędu, wywoływaną, gdy obietnica zostanie odrzucona.

Zwraca
Nową obietnicę, spełnioną wynikiem funkcji obsługi albo wartością oryginału, jeśli błędu nie było.
Na tej stronie

Przykład

#
JavaScript
const loadCourse = (id) =>
  new Promise((resolve, reject) => {
    setTimeout(() => {
      if (id === 1) resolve({ id, title: 'HTML i CSS' })
      else reject(new Error(`Nie ma kursu o id ${id}`))
    }, 200)
  })

loadCourse(5)
  .then((course) => console.log(course.title))
  .catch((error) => console.log('Błąd:', error.message))
Konsola
Błąd: Nie ma kursu o id 5

Definicja i zastosowanie

#

Metoda catch() przyjmuje funkcję, która dostaje powód odrzucenia obietnicy, najczęściej obiekt Error. Działa jak then(undefined, onRejected), ale jest czytelniejsza i zwykle stawia się ją na końcu łańcucha.

Błąd spływa łańcuchem w dół. Jeśli którykolwiek wcześniejszy krok odrzuci obietnicę albo rzuci wyjątek, pozostałe then() zostaną pominięte, a sterowanie trafi do najbliższego catch().

catch() też zwraca nową obietnicę. Gdy funkcja obsługi zwróci wartość, łańcuch wraca do normalnego działania z tą wartością, co pozwala podstawić dane zastępcze. Jeśli chcesz przekazać błąd dalej, rzuć go ponownie przez throw.

Składnia

#
Składnia
promise.catch(onRejected)

Parametry

#
  • onRejected

    function (reason)

    Funkcja wywoływana z powodem odrzucenia. Jej wynik staje się wartością nowej obietnicy.

Więcej przykładów

#
Wartość zastępcza po błędzie
JavaScript
const loadAvatar = () => Promise.reject(new Error('Brak połączenia'))

loadAvatar()
  .catch(() => 'domyslny-avatar.png')
  .then((avatar) => console.log(avatar))
Konsola
domyslny-avatar.png
Wyjątek w then() też trafia do catch()
JavaScript
Promise.resolve('{"level": 7')
  .then((text) => JSON.parse(text))
  .then((data) => console.log(data.level))
  .catch((error) => console.log(error.name))
Konsola
SyntaxError

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

#
  • Stawiaj catch() na końcu łańcucha. Złapie błędy ze wszystkich wcześniejszych kroków, także wyjątki rzucone wewnątrz then().
  • Nie ukrywaj błędów pustą funkcją. Przynajmniej je zapisz w konsoli albo pokaż użytkownikowi komunikat.
  • W kodzie z await ten sam efekt daje blok try...catch.

Powiązane hasła

#

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