Páginas

lunes, 1 de noviembre de 2021

JavaScript: Ejemplo del método Promise.all()

Este método es útil cuando se han creado varias promesas y es necesario realizar una operación solo cuando se hayan resuelto todas.

El método Promise.all() toma un array de promesas como entrada y devuelve una sola promesa que se resuelve con un array que contiene el resultado de las promesas de entrada. La promesa devuelta se resolverá sólo si todas las promesas de entrada se resuelven se rechazará si alguna es rechazada. El rechazo se resolverá con el mensaje de error de la primera promesa rechazada.

Ejemplo

En este ejemplo se crean 2 promesas que devuelven los resultados en momentos distintos. Una de ellas devuelve el resultado en 2 segundos y la otra en 1 segundo. Con el método all(), se consigue que el resultado no se procese hasta que hayan terminado las dos promesas.

let datosA = new Promise((resolvereject=>
                   {setTimeout(()=> (resolve("datos de A"), 2000))});
let datosB = new Promise((resolvereject=> 
                   {setTimeout(()=> (resolve("datos de B"), 1000))});

Promise.all([datosAdatosB]).then((result=> 
                                {console.log ("datosAyB "result)})

// RESULTADO: datosAyB  [ 'datos de A', 'datos de B' ]

Otro ejemplo

En este ejemplo se requiere rellenar el contenido de las variables datosA y datosB. Las funciones de relleno son promesas que se resuelven de nuevo en tiempos distintos, 1 o 2 segundos. Con el método all() se consigue sincronizar las funciones de rellenado y solo se muestra el contenido de las variables cuando están ámbas rellenas.

let datosA;
let datosB;

let rellenadatosA = new Promise((resolvereject=> 
                            {setTimeout(()=> 
                               {datosA="datos A"resolve(datosA)}, 2000)});
let rellenadatosB = new Promise((resolvereject=> 
                            {setTimeout(() => 
                               {datosB="datos B"resolve(datosB)}, 1000)});

Promise.all([rellenadatosA]).then(() => console.log ("datosAyB "datosAdatosB));

// datosAyB  datos A datos B

Espero que sea de ayuda. Si quedan dudas, dejadlas en comentarios. 

Chao


No hay comentarios:

Publicar un comentario