Кратко
СкопированоМетод 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 })