Кратко
СкопированоМетод finally используют для выполнения кода при завершении промиса. Код выполнится как при переходе промиса в состояние fulfilled, так и в rejected.
Метод принимает один аргумент — on. Это функция-колбэк, которая вызовется при завершении промиса.
Возвращает новый промис.
Как пишется
Скопировано
// Асинхронная функция, которая возвращает промисgetPasswords().finally(function () { // Выполнится, когда операция завершится успехом или ошибкой})
// Асинхронная функция, которая возвращает промис
getPasswords().finally(function () {
// Выполнится, когда операция завершится успехом или ошибкой
})
Как понять
Скопированоfinally выполняет переданный ему колбэк независимо от того, как завершилась асинхронная операция.
Метод используют для того чтобы избежать повторения кода между then и catch. Обычно такой код занимается уборкой после операции — скрывает индикаторы загрузки, закрывает меню и так далее.
Колбэк у finally не содержит параметров. Это следствие того, что колбэк вызывается как при успехе, так и при ошибке.
На практике
Скопированосоветует
Скопировано🛠 finally отлично работает в случаях, когда убираем лоадер со страницы или кнопки. Он сработает вне зависимости от результата промиса, поэтому можно избежать дублирования кода.
Вместо:
// Используем флаг, чтобы показать процесс отправки формыlet isLoading = truesendForm().then((res) => { isLoading = false alert('ok')}).catch((err) => { isLoading = false alert(`Ошибка: ${err.message}`)})
// Используем флаг, чтобы показать процесс отправки формы
let isLoading = true
sendForm().then((res) => {
isLoading = false
alert('ok')
}).catch((err) => {
isLoading = false
alert(`Ошибка: ${err.message}`)
})
Можно написать:
let isLoading = truesendForm().then((res) => { alert('ok')}).catch((err) => { alert(`Ошибка: ${err.message}`)}).finally(() => { isLoading = false})
let isLoading = true
sendForm().then((res) => {
alert('ok')
}).catch((err) => {
alert(`Ошибка: ${err.message}`)
}).finally(() => {
isLoading = false
})