This is the fourth article in a series on how JavaScript actually runs. You can read the full series here or on my website . In the last article , we established a precise rule: Once a macrotask finishes, JavaScript drains all microtasks before selecting the next macrotask. Microtasks like Promises are continuations that must complete before the runtime moves on to the next macrotask. async / await is often described as syntactic sugar over Promises. If that's the case, we should already understand how await works. Let’s see. The Possible Mental Models Before we look at any code, consider this question: When JavaScript reaches await , what actually happens? It's surprisingly easy to carry one of the following mental models (I certainly did when I first started learning JavaScript). Which of these feel right? a. await blocks the entire program before the value resolves, like sleep() in C or C++ b. await pauses the function and immediately yields to the event loop, creating a new macrotask c.…