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.
Przykład
#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))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
#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
#const loadAvatar = () => Promise.reject(new Error('Brak połączenia'))
loadAvatar()
.catch(() => 'domyslny-avatar.png')
.then((avatar) => console.log(avatar))Promise.resolve('{"level": 7')
.then((text) => JSON.parse(text))
.then((data) => console.log(data.level))
.catch((error) => console.log(error.name))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ątrzthen(). - Nie ukrywaj błędów pustą funkcją. Przynajmniej je zapisz w konsoli albo pokaż użytkownikowi komunikat.
- W kodzie z
awaitten sam efekt daje bloktry...catch.
Powiązane hasła
#- Promise.prototype.then()Rejestruje funkcję wywoływaną po spełnieniu obietnicy i zwraca nową obietnicę, co pozwala łączyć kroki w łańcuch.
- Promise.prototype.finally()Rejestruje funkcję wywoływaną po rozstrzygnięciu obietnicy, bez względu na to, czy skończyła się sukcesem, czy błędem.
- try...catchPrzechwytuje błędy rzucone w bloku try i obsługuje je w catch. Opcjonalny finally wykona się zawsze.
- PromiseObiekt reprezentujący wynik operacji, który pojawi się w przyszłości: wartość przy sukcesie albo błąd.
- throwRzuca wyjątek: przerywa bieżący kod i przekazuje błąd do najbliższego bloku catch.
Widzisz błąd albo brakuje przykładu? Napisz do nas.