--- title: Promise.prototype.finally() slug: Web/JavaScript/Reference/Global_Objects/Promise/finally translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally ---
{{JSRef}}

Метод finally() возвращает {{jsxref("Promise")}}. Когда Promise (обещание) был выполнен, в не зависимости успешно или с ошибкой, указанная функция будет выполнена. Это дает возможность запустить один раз определенный участок кода, который должен выполниться вне зависимости от того, с каким результатом выполнился Promise.

Это позволяет вам избавиться от дубликации кода в обработчиках {{jsxref("Promise.then", "then()")}} и {{jsxref("Promise.catch", "catch()")}}.

Синтаксис

p.finally(onFinally);

p.finally(function() {
   // завершен (успешно или с ошибкой)
});

p.finally(() => {
// завершен (успешно или с ошибкой)
});

Параметры

onFinally
Функция {{jsxref("Function")}} вызываемая когда Promise (обещание) завершено.

Возвращаемое значение

Возвращает {{jsxref("Promise")}} для которого в качестве обработчика finally задана функция onFinally.

Описание

finally() может быть полезен, если необходимо произвести какие-либо вычисления или очистку, как только Promise (обещание) завершено, вне зависимости от результата.

finally() очень схож с вызовом .then(onFinally, onFinally), однако существует несколько различий:

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

Браузерная совместимость

{{Compat("javascript.builtins.Promise.finally")}}

Смотрите также