π JavaScript Async/Await vs `.then()` : The Microtask & Event Loop Secret
Ever seen this and wondered why the output changes just by reordering lines? async function hi() { return "there"; } // Version A const waitedhi = await hi(); console.log(waitedhi); hi().then(res =...
Ever seen this and wondered why the output changes just by reordering lines? async function hi() { return "there"; } // Version A const waitedhi = await hi(); console.log(waitedhi); hi().then(res => console.log(res)); console.log("end"); vs // Version B hi().then(res => console.log(res)); const waitedhi = await hi(); console.log(waitedhi); console.log("end"); π Same codeβ¦ different output. Why? π§ The Hidden Mechanism: Microtasks Both await and .then() use Promises, and both schedule work in the microtask queue. π Key rule: Microtasks run in the order they are added (FIFO) β‘ What await really does await hi(); is roughly: hi().then(result => { // rest of your code }); So: .then() β schedules a microtask await β schedules a microtask (continuation) π₯ Why order matters Version A await schedules continuation resumes β logs "there" .then() schedules another microtask "end" logs .then() runs β Output: there end there Version B .then() β microtask A await β microtask B Run A β Run