Tengo varias promesas que obtienen diferentes activos. quiero lograr:
then() .Promise.all().then() .Necesito asegurarme de que 1 se ejecute antes que 2. Parece que funciona según lo que he probado.
// handle promises one by one promise1.then(results => {}); promise2.then(results => {}); // common process that should come after the above then()s Promise.all([promise1, promise2]) .then(results => {}); ¿Pero puedo confiar en ello? ¿ Siempre se ejecuta " single " then() antes de then() en Promise.all() ?
Si bien Promise.all está estancado porque espera que finalicen todas las promesas, no hay garantía de que se resuelva después de la llamada .then a la promesa que se resuelve en último lugar.
En su lugar, debe intentar crear nuevas promesas a partir de las llamadas .then .
// handle promises one by one const promise3 = promise1.then(results => {}); const promise4 = promise2.then(results => {}); // common process that should come after the above then()s Promise.all([promise3, promise4]) .then(results => {});De esta manera, puede garantizar que la Promesa se resolverá después de las llamadas.
Puede hacerlo usando Async/await. Con la espera de cada promesa, puede escribir código para procesar los datos al final.
Ejemplo:
(async () => { const responses = []; await new Promise((res) => res("promise1")).then((res) => { console.log("From promise1 first then"); responses.push(res); }); // Code at the end to do after all promises console.log("Coming from second"); console.log("Responses:", responses); })();