--- title: Promise.prototype.finally() slug: Web/JavaScript/Reference/Global_Objects/Promise/finally translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally ---
Метод finally()
возвращает {{jsxref("Promise")}}. Когда Promise
(обещание) был выполнен, в не зависимости успешно или с ошибкой, указанная функция будет выполнена. Это дает возможность запустить один раз определенный участок кода, который должен выполниться вне зависимости от того, с каким результатом выполнился Promise
.
Это позволяет вам избавиться от дубликации кода в обработчиках {{jsxref("Promise.then", "then()")}} и {{jsxref("Promise.catch", "catch()")}}.
p.finally(onFinally); p.finally(function() { // завершен (успешно или с ошибкой) }); p.finally(() => { // завершен (успешно или с ошибкой) });
onFinally
Promise
(обещание) завершено.Возвращает {{jsxref("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
.Note: A throw
(or returning a rejected promise) in the finally
callback will reject the new promise with the rejection reason specified when calling throw()
.
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 | Status | Comment |
---|---|---|
TC39 proposal | Stage 4 |
Чтобы внести свой вклад в эти данные о совместимости, пожалуйста, напишите запрос извлечения для этого репозитория: https://github.com/mdn/browser-compat-data.
{{Compat("javascript.builtins.Promise.finally")}}