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

El método finally() devuelve una {{jsxref("Promise")}}. Cuando la promesa se resuelve, sea exitosa o rechazada, la función de callback específicada será ejecutada. Esto ofrece una forma de ejecutar código sin importar como se haya resuelto la promesa.

Esto ayuda a evitar tener código duplicado tanto en el {{jsxref("Promise.then", "then()")}} como en el {{jsxref("Promise.catch", "catch()")}}.

Sintaxis

p.finally(alFinalizar);

p.finally(function() {
   // finalizada (exitosa o rechazada)
});

Parámetros

alFinalizar
Una {{jsxref("Function")}} llamada cuando la Promise se resuelve con éxito o falla.

Valor de retorno

Devuelve una {{jsxref("Promise")}} cuyo finally fue fijado a la función específicada en alFinalizar.

Descripción

El método finally() puede ser de utilidad si quieres hacer algún proceso o limpieza una vez que la promesa termina, sin importar su resultado.

Utilizar finally() es muy similar a llamar .then(onFinally, onFinally), sin embargo tiene algunas diferencias:

Nota: Un throw (o retornar una promesa rechazada) en el callback finally va a rechazar la nueva promesa con la razón de rechazo especificada al llamar throw().

Ejemplos

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, no hemos obtenido un JSON!");
  })
  .then(function(json) { /* procesar el JSON */ })
  .catch(function(error) { console.log(error); /* esta línea podría arrojar error, e.g. cuando console = {} */ })
  .finally(function() { isLoading = false; });

Especificaciones

Especificación Estado Comentario
{{SpecName('ESDraft', '#sec-promise.prototype.finally', 'Promise.prototype.finally')}} {{Spec2('ESDraft')}}

Compatibilidad en navegador

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

Ver también