Estaba aprendiendo el ciclo de eventos de Js e intenté ejecutar esta función:
async function foo() { console.log('FIrst'); let a = await new Promise((resolve,reject)=>{ console.log("inside Promise"); resolve(); }) console.log(a); console.log('Second'); } foo(); console.log('Three');Al ejecutar este código dio salida de la siguiente manera:
FIrst inside Promise Three undefined Second No puedo entender por qué perdió su a (la asignación del objeto). He buscado este comportamiento pero no pude entenderlo a partir de las respuestas. ¿Puede alguien explicar cuál es el orden de ejecución que da como resultado esta salida?
Esto se debe a que si está usando await , devuelve a a variable lo que pasó en resolve , por lo que no pasó ningún valor en resole, por eso no está undefined
Cuando await la promesa recién creada, no está asignando la promesa a a , está asignando el valor de resolución de la misma.
async function foo() { let a = await new Promise((resolve, reject) => { // This is where the value stems from resolve(42); }); console.log(a); } foo(); Si desea mantener la await mientras recupera la referencia, puede separar esos dos pasos:
async function foo() { let a = new Promise((resolve, reject) => { resolve(42); }); await a; console.log(a instanceof Promise); } foo();La razón por la que el valor de la promesa no está definido es porque no estableció el valor que debería generar la promesa. Si desea que la promesa devuelva algo que no sea indefinido, coloque una expresión o cadena dentro de la función resolve(). Si desea que la promesa devuelva "Promesa completada" después de que se resuelva y consola. registre el resultado, simplemente use el código
async function foo() { let a = await new Promise((resolve,reject)=>{ resolve("Promise completed"); }) console.log(a); } foo();