Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

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

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

Синтаксис

p.finally(onFinally);

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

Параметры

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

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

Returns a Promise whose finally handler is set to the specified function, onFinally.

Описание

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

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

  • Использование finally() позволяет избежать двойного объявления одной и той же функции или создания переменной. 
  • finally не получает аргументов, так как не существует способа определить, будет ли обещание выполнено успешно или с ошибкой. Данный метод необходимо использовать, если не важна причина ошибки или результат успешного выполнения и, следовательно, нет необходимости ее/его передавать.
  • В отличие от Promise.resolve(2).then(() => {}, () => {}) (результатом которого будет undefined), Promise.resolve(2).finally(() => {}) возратит 2.
  • Аналогично, Promise.reject(3).then(() => {}, () => {}) (результатом которого будет undefined), Promise.reject(3).finally(() => {}) возвратит 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().

Examples

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; });

Specifications

Specification Status Comment
TC39 proposal Stage 4  

Browser compatibility

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidEdge MobileFirefox для AndroidOpera для AndroidSafari on iOSSamsung InternetNode.js
Базовая поддержкаChrome Полная поддержка 63Edge Полная поддержка 18Firefox Полная поддержка 58IE Нет поддержки НетOpera Полная поддержка 50Safari Полная поддержка 11.1WebView Android Полная поддержка 63Chrome Android Полная поддержка 63Edge Mobile Нет поддержки НетFirefox Android Полная поддержка 58Opera Android Полная поддержка 50Safari iOS Полная поддержка 11.1Samsung Internet Android Нет поддержки Нетnodejs Полная поддержка 10.0.0

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки

See also

Метки документа и участники

Внесли вклад в эту страницу: NoviceBlunderer, Zudwa, x1unix
Обновлялась последний раз: NoviceBlunderer,