Así que actualmente estoy aprendiendo sobre las promesas en JavaScript, e intenté hacer mi primera promesa y me di cuenta de que ejecutaba setTimeout() incluso si no llamaba a la promesa para empezar, simplemente definiéndola, se ejecutaba sola. Esto es postLogin .
const postLogin = new Promise((resolve, reject) => { setTimeout(() => { console.log("Token: 1234") }, 2000); }); ^ Esto cierra la sesión de "Token: 1234" sin llamar a postLogin.then()
Donde esto no se ejecuta hasta que llame a postLogin1.then(token => {console.log(token)});
const postLogin1 = new Promise((resolve, reject) => { setTimeout(() => { resolve("Token1: 1234"); }, 2000); }); postLogin1.then(token => {console.log(token)}); ¿Por qué si no agrego "resolve" ejecuta el código sin invocarlo?
Los constructores de promesas llaman a la función que les pasa inmediatamente . Este es el caso en ambos ejemplos.
Si tiene console.log dentro de esa función, llamará a console.log . Si no lo hace, entonces no lo hará. Esa es la diferencia clave entre los ejemplos.
El método then simplemente agrega un controlador de eventos que se llamará cuando se resuelva la promesa (o inmediatamente si ya se ha resuelto).
Si tiene console.log en el controlador then , se llamará y la función se resolverá.
Si nunca llama a resolve , nunca se resolverá. La función que le pasas todavía se llama.