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.
- Zwraca
- Nową obietnicę z tym samym wynikiem lub błędem co oryginał.
Przykład
#const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms))
let loading = true
console.log('Ładowanie:', loading)
wait(300, ['Lekcja 1', 'Lekcja 2'])
.then((lessons) => console.log('Lekcje:', lessons))
.catch((error) => console.log('Błąd:', error.message))
.finally(() => {
loading = false
console.log('Ładowanie:', loading)
})Definicja i zastosowanie
#Metoda finally() przyjmuje funkcję bez argumentów, która uruchomi się zawsze, gdy obietnica przestanie oczekiwać: po spełnieniu i po odrzuceniu. To dobre miejsce na sprzątanie, na przykład ukrycie wskaźnika ładowania albo odblokowanie przycisku.
Funkcja w finally() nie dostaje wyniku ani błędu i nie zmienia wartości łańcucha. Wynik lub błąd przechodzi przez nią dalej bez zmian, więc kolejne then() i catch() działają tak, jakby jej nie było.
Jest jeden wyjątek: jeśli funkcja w finally() rzuci błąd albo zwróci odrzuconą obietnicę, ten nowy błąd zastąpi oryginalny wynik.
Składnia
#promise.finally(onFinally)Parametry
#onFinally
function ()
Funkcja wywoływana po spełnieniu lub odrzuceniu obietnicy. Nie dostaje żadnych argumentów.
Więcej przykładów
#const value = await Promise.resolve(42).finally(() => 'ta wartość jest ignorowana')
console.log(value)
try {
await Promise.reject(new Error('Serwer nie odpowiada')).finally(() => {
console.log('Sprzątanie po błędzie')
})
} catch (error) {
console.log(error.message)
}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
#- Używaj
finally()do sprzątania, które musi się wykonać zawsze: wyłączenia wskaźnika ładowania, zamknięcia połączenia, odblokowania formularza. - Nie zwracaj z
finally()wartości, na które liczysz. Zostaną zignorowane. - W kodzie z
awaitodpowiednikiem jest blokfinallyw konstrukcjitry...catch...finally.
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.catch()Rejestruje funkcję obsługi błędu, wywoływaną, gdy obietnica zostanie odrzucona.
- 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.
Widzisz błąd albo brakuje przykładu? Napisz do nas.