Blog de Gonzalo

PROMESAS EN SECUENCIA O PARALELO EN JAVASCRIPT

Hace un tiempo hablé sobre las promesas en javascript y hoy quiero hablaros de como ejecutar promesas en secuencia o paralelo en javascript de una manera legible. En muchos casos unas promesas dependen de otras, es decir, que hay que esperar que una promesa haya terminado de ejecutarse con su resultado y después ejecutar otra promesa es decir que las promesas deben ejecutarse en secuencia, ya que son dependientes entre sí.
El ejemplo más típico de una promesa en secuencia es el hacer una llamada Ajax mediante Fetch, para obtener el JSON de un servicio web se necesita encadenar dos promesas. La primera para recibir la respuesta del servidor y la segunda para procesar dicha respuesta. Veamos un ejemplo:

fetch("https://example.com/orders") .then( response => response.json() ) .then( json => console.log(json) )

El ejemplo anterior es bastante sencillo. Ahora viene como hacer varias promesas en paralelo ya que no dependenten entre sí y se pueden ejecutar a la vez. Se podría colocar el código de todas las promesas suelto e independiente entre sí. Como en el siguiente ejemplo:
var p1 = new Promise((resolve, reject) => { setTimeout(resolve, 1000, "one"); }); var p2 = new Promise((resolve, reject) => { setTimeout(resolve, 2000, "two"); }); var p3 = new Promise((resolve, reject) => { setTimeout(resolve, 3000, "three"); }); var p4 = new Promise((resolve, reject) => { setTimeout(resolve, 4000, "four"); }); var p5 = new Promise((resolve, reject) => { reject("reject"); }); Promise.all([p1, p2, p3, p4, p5]).then(values => { console.log(values); }, reason => { console.log(reason) });

Las promesas son vienen bien para la programación asíncrona, porque mantienen el orden en el código y la sencillez, con lo que también tus programas serán más claros y fáciles de extender o depurar. La promesas en secuenci son útiles cuando la ejecución de una promesa depende del resultado producido por la anterior, pero también promesas en paralelo, de manera que se ejecuten todas las promesas todas a una ahorrando tiempo.