--- 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 ---
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
.
p.finally(quandoEstabelecida); p.finally(function() { // concluída (realizada ou rejeitada) });
quandoEstabelecida
Promise
é concluída.Retorna uma {{jsxref("Promise")}} onde o manipulador finally
é definido como a função especificada, quandoEstabelecida
.
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:
finally
não poderá receber nenhum argumento, já que não existem meios confiáveis de determinar se a promise foi realizada ou rejeitada. Seu uso é para quando você realmente não se importa com os possíveis motivos de uma falha ou possíveis valores retornados de um sucesso, não tendo, portanto, razão para fornecê-los.Promise.resolve(2).then(() => {}, () => {})
(será resolvido como undefined
), Promise.resolve(2).finally(() => {})
será resolvido como 2
.Promise.reject(3).then(() => {}, () => {})
(que será resolvido como undefined
), Promise.reject(3).finally(() => {})
será rejeitado como 3
.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()
.
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; });
Specification | Status | Comment |
---|---|---|
TC39 proposal | Stage 4 |
{{Compat("javascript.builtins.Promise.finally")}}