Tengo una var para mantener el objeto de la promesa y llamar a .then en diferentes lugares. Obtuve la misma marca de tiempo para diferentes .then. ¿Qué sucede cuando se llama .then a un objeto de promesa ya resuelto?
var promise1 = new Promise((resolve) => {resolve(Date.now().toString())}) promise1.then((response) => {console.log(response)}); promise1.then((response) => {console.log(response)});¿Qué sucede exactamente cuando llamamos .then después de que se resuelve una Promesa?
Programa (justo antes del siguiente tic del bucle de eventos) que se llame a los controladores .then() .
Entonces, el Javascript actual que se está ejecutando continuará ejecutándose y finalizando y cuando devuelva el control al bucle de eventos, los .then() que se acaban de registrar en una promesa ya resuelta llamarán a sus devoluciones de llamada en el orden en que fueron registrados. Los controladores de promesa se sirven antes que otras cosas en el bucle de eventos, por lo que en realidad no llegan al bucle de eventos hasta que no haya más devoluciones de llamada de promesa para llamar.
Por lo tanto, siempre es seguro registrar un controlador .then() . No tienes que preocuparte de si la promesa ya está resuelta o no. De cualquier manera, se llamará al controlador .then() (suponiendo que la promesa se resuelva o ya se haya resuelto).
Entonces, si modifica el registro un poco así:
const promise1 = new Promise((resolve) => {resolve(Date.now().toString())}) promise1.then((response) => {console.log("first .then()")}); promise1.then((response) => {console.log("second .then()")}); console.log("now here");Obtendrá esta salida:
now here first .then() second .then()