Pongamos que queremos lanzar la misma función, que devuelve una promesa, pero con distintos parámetros.
Javascript dispone de la función Promise.all para ejecutar un array de promesas. Por ejemplo:
var f = funcionQueDevuelveUnaPromesa; Promise.all([f(arg1), f(arg2), f(arg3)]) .then(_ => console.log("fin"));
En este ejemplo, las tres promesas se ejecutan en paralelo. Es importante saber que Promise.all espera a que todo se cumpla o bien se produzca el primer rechazo.
Si queremos ejecutar estas operaciones de manera secuencial deberíamos conseguir algo del tipo:
f(arg1).then(_ => f(arg2)).then(_ => f(arg3));
Lo anterior es bastante parecido a lo que podemos conseguir con la función Array.reduce:
var f = funcionQueDevuelveUnaPromesa; [arg1, arg2, arg3].reduce((cadenaPromesas, arg) => { return cadenaPromesas.then(_ => { return f(arg); }); }, Promise.resolve()) .then(_ => console.log("fin"));
Más complicado si las promesas son diferentes y/o tuviesen diferentes tipos de argumentos. En ese caso habría que usar bind en la llamada.
Deja una respuesta