try. . . catch
Przechwytuje błędy rzucone w bloku try i obsługuje je w catch. Opcjonalny finally wykona się zawsze.
Przykład
#function parseProfile(json) {
try {
const profile = JSON.parse(json)
return `Witaj, ${profile.name}!`
} catch (error) {
return `Błędne dane: ${error.name}`
}
}
console.log(parseProfile('{"name":"Ania"}'))
console.log(parseProfile('{name: Ania}'))Definicja i zastosowanie
#Kod, który może rzucić błąd, umieszczasz w bloku try. Jeśli coś pójdzie nie tak, wykonanie przerywa się w miejscu błędu i przechodzi do catch, który dostaje obiekt błędu. Program działa dalej, zamiast zatrzymać się z komunikatem w konsoli.
Blok finally wykonuje się zawsze: po udanym try, po obsłużonym błędzie, a nawet wtedy, gdy w środku padło return. To dobre miejsce na sprzątanie, np. ukrycie wskaźnika ładowania. Jeśli obiekt błędu nie jest Ci potrzebny, możesz pominąć nawias: catch { }.
try...catch łapie błędy synchroniczne oraz te z await wewnątrz funkcji async. Nie złapie błędu z callbacka, który uruchomi się później, np. w setTimeout(). Łap tylko błędy, które potrafisz sensownie obsłużyć, a pozostałe przekazuj dalej przez throw.
Składnia
#try {
// kod, który może rzucić błąd
} catch (error) {
// obsługa błędu
} finally {
// wykona się zawsze
}Więcej przykładów
#function loadLesson(id) {
console.log('Ładowanie...')
try {
if (id < 1) {
throw new Error('Nieprawidłowe id')
}
return `Lekcja ${id}`
} catch (error) {
return error.message
} finally {
console.log('Koniec ładowania')
}
}
console.log(loadLesson(3))
console.log(loadLesson(0))async function fetchScore() {
throw new Error('Serwer niedostępny')
}
async function showScore() {
try {
const score = await fetchScore()
console.log(score)
} catch (error) {
console.log('Nie udało się:', error.message)
}
}
await showScore()try {
const user = null
console.log(user.name)
} catch (error) {
if (error instanceof TypeError) {
console.log('Brak użytkownika')
} else {
throw error
}
}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
#- Nie zostawiaj pustego
catch. Błąd połknięty bez śladu to godziny szukania przyczyny. Przynajmniej zapisz go przezconsole.error(). - Obejmuj blokiem
trytylko fragment, który może zawieść, np.JSON.parse()albofetch(), a nie cały program. - Treść błędów rzucanych przez silnik (np. przy odczycie z
null) różni się między przeglądarkami. W logice programu sprawdzajerror.namelubinstanceof, a nieerror.message.
Powiązane hasła
#- throwRzuca wyjątek: przerywa bieżący kod i przekazuje błąd do najbliższego bloku catch.
- async functionDeklaruje funkcję asynchroniczną, która zawsze zwraca obietnicę i może używać w środku słowa await.
- awaitWstrzymuje funkcję async do czasu rozstrzygnięcia obietnicy i zwraca jej wartość albo rzuca jej błąd.
- Promise.prototype.catch()Rejestruje funkcję obsługi błędu, wywoływaną, gdy obietnica zostanie odrzucona.
- JSON.parse()Zamienia napis w formacie JSON na wartość JavaScript, np. obiekt lub tablicę.
Widzisz błąd albo brakuje przykładu? Napisz do nas.