Esperaba que finalmente se ejecutara después de resolver todas las promesas, pero veo que se ejecuta después de resolver la primera promesa. Así que tengo dos preguntas: (1) ¿El 'finally one' por promesa es como 'catch'? Es decir, ¿puedo tener un 'finally por promesa' o por este comportamiento? (2) Si necesito que se ejecute finalmente después de resolver todas las promesas, ¿necesito solo una al final, como atrapar?
let variable = new Promise((resolve, reject) => { console.log('empiezo 1era promesa, espero 9'); setTimeout(() => { resolve(1); }, 9000); }) .finally(() => { console.log('empieza finally'); }) .then(data => { return new Promise((resolve, reject) => { console.log('1era promesa resulta, empiezo 2da promesa, espero 5 seg'); setTimeout(() => { resolve(2); }, 5000); }); }) .then(data => { console.log('2da promesa resulta, ya termino todo'); console.log(data); })Salida: empiezo 1era promesa, espero 9 empieza finalmente 1era promesa resulta, empiezo 2da promesa, espero 5 seg 2da promesa resulta, ya termino todo 2
Mi duda es porque siempre veo ejemplos con solo un finalmente al final y este se ejecuta después de resolver todas las promesas.
Todos los métodos then , catch y finally son "por promesa", la promesa a la que fueron llamados. Todos devuelven una nueva promesa que se resolverá después de que se hayan ejecutado las devoluciones de llamada, y no conocen ninguna otra promesa más adelante en la cadena (o incluso en otras cadenas).
Si desea que su devolución de llamada finally se ejecute después de que se hayan liquidado todas las promesas en su cadena, también debe encadenarla al final.