Hablando de promesas - parte 2

Joel H. Gomez Paredes
codecrafters
Published in
3 min readJan 21, 2017

Antes de pasar te invito a que leas la primera parte de esta serie y la compartas con tu pareja, tu familia, tu perro, el señor de las tortas, tu crush o con el resto de mundo.

¿No te ha pasado alguna vez que tienes que realizar N cantidad de operaciones asíncronas y realizar otra operación cuando estas terminen?

Hay veces que por XY o Z(chiste pokemon) razón tenemos que hacer peticiones a varios endpoints, realizar múltiples operaciones en una base de datos, escribir una serie de archivos a disco, etc. Este tipo de funcionalidad normalmente solía ser un poco engorrosa ya implicaba sumergirnos en ese lugar llamado callback hell o realizar un proceso muy complejo para obtener la funcionalidad deseada.

Hasta que llegaron las promesas y nos brindaron el casi bendito método all()

Pero, ¿que hace el método all()? Simplemente nos permite pasar como parámetro un arreglo de promesas y obtener los resultados de estas en un arreglo.

Arreglo de promesas

Pero como toda promesa puede no cumplirse, el comportamiento del método all lo hace entrar al bloque catch si es que alguna promesa llega a fallar, no importando si las anteriores se cumplieron.

Agregando una promesa fallida al arreglo de promesas

Una forma de evitar esto es agregando un catch a las promesa que mandamos agregamos al arreglo, con esto nos aseguramos de capturar el error y procesarlo de la manera que nos parezca mas conveniente.

Atrapando errores en promesas que serán resueltas con .all

Otra función interesante de las promesas es el método .race, básicamente este permite obtener el valor de la primera promesa que se resuelva o rechace en un arreglo de promesas. Esta funcionalidad es muy útil cuando usas diferentes estrategias de caching o networking para la obtención de datos cuando usamos service workers.

Promesas compitiendo entre si

Estos solo son algunos de los métodos utilizados por el estándar de promesas de javascript, otras bibliotecas incluyen funcionalidades extra de las que hablaremos en futuras publicaciones y si desean revisar los ejemplos les dejo el repositorio.

--

--

Joel H. Gomez Paredes
codecrafters

Frontend Developer at Platzi, Google Developer Expert in Web Technologies And Google Maps Platform, A Reverse Developer & Fullsnack JS Developer