Promise.prototype.finally()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since outubro de 2018.
O método finally() retorna uma 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 then() e catch() da Promise.
Sintaxe
p.finally(quandoEstabelecida);
p.finally(function() {
// concluída (realizada ou rejeitada)
});
Parâmetros
quandoEstabelecida-
Uma
Functionchamada quando aPromiseé concluída.
Valor de retorno
Retorna uma 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:
- Ao passar a função na linha (entre os parênteses do método), você precisa passá-la apenas uma vez, ao invés de ser forçado a declará-la duas vezes ou a definir em uma variável.
- O callback de
finallynã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. - Diferentemente de
Promise.resolve(2).then(() => {}, () => {})(será resolvido comoundefined),Promise.resolve(2).finally(() => {})será resolvido como2. - De maneira semelhante, diferentemente de
Promise.reject(3).then(() => {}, () => {})(que será resolvido comoundefined),Promise.reject(3).finally(() => {})será rejeitado como3.
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
Loading…