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

O método finally() retorna uma {{jsxref("Promise")}}. Quando a promise for estabelecida, tenha ela sido realizada ou rejeitada, executa-se a função callback especificada. Isso permite a execução de um código que acontecerá independentemente da Promise ter sido realizada (com sucesso) ou rejeitada (com falha).

Assim, você pode evitar a duplicação do código em ambos os handlers {{jsxref("Promise.then", "then()")}} e {{jsxref("Promise.catch", "catch()")}} da Promise.

Sintaxe

p.finally(quandoEstabelecida);

p.finally(function() {
   // concluída (realizada ou rejeitada)
});

Parâmetros

quandoEstabelecida
Uma {{jsxref("Function")}} chamada quando a Promise é concluída.

Valor de retorno

Retorna uma {{jsxref("Promise")}} onde o manipulador finally é definido como a função especificada, quandoEstabelecida.

Descrição

O método finally() pode ser útil quando você deseja realizar algum tipo de processamento ou limpeza quando a promise for estabelecida, independentemente de seu resultado (sucesso ou falha).

O método finally() é bastante similar a chamar .then(quandoEstabelecida, quandoEstabelecida). Porém, existem algumas diferenças:

Nota: Um throw (ou retorno de uma promise rejeitada) no callback de finally rejeitará a nova promise com a razão de rejeição especificada na chamada de throw().

Exemplos

let carregando = true;

fetch(minhaRequisicao).then(function(resposta) {
    var tipoConteudo = response.headers.get("content-type");
    if(tipoConteudo && tipoConteudo.includes("application/json")) {
      return resposta.json();
    }
    throw new TypeError("Opa, isso não é JSON!");
  })
  .then(function(json) { /* processamento do seu JSON */ })
  .catch(function(erro) { console.log(erro); })
  .finally(function() { carregando = false; });

Especificações

Specification Status Comment
TC39 proposal Stage 4  

Compatibilidade com navegadores

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

Veja também