El código es:
Promise.resolve().then(() => { console.log(0); return Promise.resolve(4); }).then((res) => { console.log(res) }) Promise.resolve().then(() => { console.log(1); }).then(() => { console.log(2); }).then(() => { console.log(3); }).then(() => { console.log(5); }).then(() =>{ console.log(6); }) Y el resultado es: 0 1 2 3 4 5 6 .
¿Por qué log 4 está después log 3 ? ¿Qué es lo especial que sucedió al devolver un promise object en el método .then ?
Javascript ejecuta un bucle de eventos.
Aquí está mi conjetura.
Promise.resolve() crea una promesa que se resolverá en la siguiente iteración. Y cada bloque entonces se ejecutará en la siguiente iteración después de que finalice el bloque anterior. Así que aquí está el orden de ejecución:
Iteración 1: Creó 2 promesas (nómbrelas A y B) que se resolverán en la Iteración 2
Iteración 2: la Promesa A se resuelve. La promesa B se resuelve
Iteración 3: then se ejecuta el bloque de la Promesa A, que imprime 0 y crea una nueva promesa (llámela C) que se resolverá en la Iteración 4. Primero then se ejecuta el bloque de la Promesa B, que imprime 1.
Iteración 4: Segundo then se ejecuta el bloque de la Promesa B, que imprime 2. La Promesa C se resuelve. (Dado que la Promesa C se agrega al ciclo de eventos más tarde que la Promesa B, la Promesa B se resuelve antes que la Promesa C)
Iteración 5: Tercero then se ejecuta el bloque de la Promesa B, que imprime 3. then , se ejecuta el bloque de la Promesa C, que imprime 4.
Iteración 6: adelante then se ejecuta el bloque de la Promesa B, que imprime 5.
Iteración 7: then ejecuta el quinto bloque de Promise B, que imprime 6.