Una promesa p1 está encadenada con un thenable que devuelve nuevamente una promesa encadenada p2 . p2 es p1 encadenado con una instrucción console.log:
p0 = Promise.resolve(); p1 = p0.then(() => { console.log("Step1"); p2 = p1.then(() => { console.log("Step2"); }); return p2; });Espero que el código genere "Paso 1" y "Paso 2". Pero solo muestra "Paso 1". ¿Alguien puede explicar por qué?
Sé que then() generalmente está encadenado como ( p0.then(...).then(...) ). Entonces esta pregunta no se trata de cambiar el código para que se ejecute, sino de la razón por la cual no funciona .
Has creado promesas que dependen unas de otras para resolverse, así que ninguna se resuelve.
Cuando devuelves una Promesa desde dentro de un .then , la Promesa que resuelve ese .then solo se cumplirá cuando se cumpla la Promesa devuelta. Asi que
p1 = p0.then(() => { // ... return p2; }); significa que p1 solo se resolverá cuando:
Pero p2 solo se resuelve después de que p1 se resuelve debido a
p2 = p1.then(() => {Así que tampoco resolver. El paso 1 se registra porque p0 se resuelve, pero el paso 2 no porque ni p1 ni p2 se resuelven.