This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Promise.prototype.finally()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since октябрь 2018 г..
Методfinally() возвращаетPromise. Когда промис был выполнен, вне зависимости успешно или с ошибкой, указанная функция будет выполнена. Это даёт возможность запустить один раз определённый участок кода, который должен выполниться вне зависимости от того, с каким результатом выполнилсяPromise.
Это позволяет вам избавиться от дубликации кода в обработчикахthen() иcatch().
In this article
Синтаксис
p.finally(onFinally);p.finally(function() { // завершён (успешно или с ошибкой)});p.finally(() => {// завершён (успешно или с ошибкой)});Параметры
Возвращаемое значение
ВозвращаетPromise для которого в качестве обработчикаfinally задана функцияonFinally.
Описание
finally() может быть полезен, если необходимо произвести какие-либо вычисления или очистку, как толькоPromise (промис) завершено, вне зависимости от результата.
finally() очень схож с вызовом.then(onFinally, onFinally), однако существует несколько различий:
- Использование
finally()позволяет избежать двойного объявления одной и той же функции или создания переменной. finallyне получает аргументов, так как не существует способа определить, будет ли промис выполнен успешно или с ошибкой. Данный метод необходимо использовать, если не важна причина ошибки или результат успешного выполнения и, следовательно, нет необходимости её/его передавать.- В отличие от
Promise.resolve(2).then(() => {}, () => {})(результатом которого будет resolved-промис, со значениемundefined), результатомPromise.resolve(2).finally(() => {})будет resolved-промис со значением2. - Аналогично, в отличии от
Promise.reject(3).then(() => {}, () => {})(результатом которого будет resolved-промис, со значениемundefined), результатомPromise.reject(3).finally(() => {})будет rejected-промис со значением3.
Примечание:Athrow (or returning a rejected promise) in thefinally callback will reject the new promise with the rejection reason specified when callingthrow().
Примеры
let isLoading = true;fetch(myRequest) .then(function (response) { var contentType = response.headers.get("content-type"); if (contentType && contentType.includes("application/json")) { return response.json(); } throw new TypeError("Oops, we haven't got JSON!"); }) .then(function (json) { /* process your JSON further */ }) .catch(function (error) { console.log(error); }) .finally(function () { isLoading = false; });Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-promise.prototype.finally> |