El autor de la nota, cuya traducción publicamos hoy, dice que apenas se abstuvo de no llamarlo "Finalmente, la oportunidad que todos esperaban", o de alguna manera bromear sobre este tema. Al final, decidió prescindir de bromas y simplemente hablar sobre la característica realmente importante y útil de los objetos Promise.
Si recién está comenzando a aprender JavaScript y no está muy familiarizado con las promesas (a veces se les llama "promesas", "resultados prometidos", "Objetos de promesa"), puede que le interesen nuestras publicaciones anteriores sobre este tema:
→
Promesas en ES6: patrones y antipatrones→
JavaScript: métodos de programación asincrónicos→
JavaScript ES8 y transición a asíncrono / espera→
Asíncrono / espera: 6 razones para olvidarse de las promesas→
Escapar del infierno asíncrono / esperar→
JavaScript ES6: escribe menos - haz más→
Guía de promesas para aquellos que quieran resolverlos→
Diseño asíncrono / en espera de JavaScript: fortalezas, dificultades y patrones de uso→
Uso de promesas en JavaScriptPromise.prototype.finally Method
La cláusula
25.6.5.3 del estándar ECMAScript 2018 está dedicada al
método Promise.prototype.finally . Según
caniuse.com , el nivel de soporte para este método es aproximadamente del 81%. Este método también se puede usar en Node.js.
El método de promesa final es una de las innovaciones más importantes del estándar, que le permite especificar una función que se ejecutará independientemente del resultado de la promesa. Dicha función se cumplirá si la promesa se resuelve con éxito y si se rechaza.
Considere un ejemplo:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); });
Esta es una promesa perfectamente común que se resuelve después de 2000 milisegundos. Si después de eso necesitamos realizar alguna acción, necesitaremos un bloque de
then
:
myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } );
Se pasan dos funciones anónimas al método
then
. El primero se ejecutará si la promesa se resuelve con éxito. El segundo es cuando es rechazado. ¡Nuestra promesa siempre se completa con éxito, el mensaje de
success!!!
siempre se mostrará en la consola
success!!!
. Todo esto es muy bueno, pero ¿qué pasa si es necesario que ciertas acciones se lleven a cabo después del rechazo de la promesa y después de la finalización exitosa de su trabajo? Aquí el
finally
método nos ayudará:
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success!!!'); }, 2000); }); myPromise.then( result => { console.log(result) }, failMessage => { console.log(failMessage) } ).finally(finallyMessage => { console.log('FINALLY!!')});
Independientemente de cómo la promesa complete su trabajo, además del mensaje correspondiente, ¡el texto
FINALLY!!
, que nos dice que la función de devolución de llamada pasada al método
finally
funciona de todos modos. Para verificar esto, puedes
experimentar .
Resumen
El hecho de que el método Promise.prototype.finally haya aparecido en ES2018 sugiere que se puede esperar un nivel muy alto de soporte de navegador en el futuro previsible. Esto significa que lo que antes tenía que usar herramientas auxiliares creadas por desarrolladores de terceros ahora se puede implementar usando herramientas estándar.
¿En qué situaciones puede ser
Promise.prototype.finally
método
Promise.prototype.finally
? Por ejemplo, si, cuando comienza la Promesa utilizada para descargar algo, comienza a reproducirse una animación,
finally
puede completar esta animación. En el bloque
finally
, puede, por ejemplo, cerrar una determinada ventana modal. De hecho, hay muchas situaciones en las que el método de
finally
puede ser útil.
Estimados lectores! ¿Ha utilizado sustitutos para el método de promesas finalmente antes de sus implementaciones estándar?
