I was learning the event loop of Js and tried to run this function:
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');
On running this code gave output as follows:
FIrst inside Promise Three undefined Second
I am not able to understand why did a
lose its value (the object assignment). I have searched for this behavior but was not able to understand from the answers.
Can someone please explain what is the order of execution which results in this output.
Advertisement
Answer
When you await
the newly created promise, you’re not assigning the promise to a
, you’re assigning the resolve value of it.
async function foo() { let a = await new Promise((resolve, reject) => { // This is where the value stems from resolve(42); }); console.log(a); } foo();
If you want to keep the await
while also retrieving the reference, you can separate those two steps:
async function foo() { let a = new Promise((resolve, reject) => { resolve(42); }); await a; console.log(a instanceof Promise); } foo();