await lets you pause inside an async function until a Promise settles, so async code reads like clear, top-to-bottom logic. It doesn’t block the thread; it yields to the event loop and resumes with the result (or throws on rejection).
Advantages
- Clear, readable control flow (less callback/promise chaining)
- Centralized error handling with
try/catch/finally - Easier testing and maintenance
- Fewer race-condition footguns when steps must be sequential
Disadvantages
- Easy to accidentally serialize independent work (performance hit)
- Array helpers like
forEachdon’t await (can cause subtle bugs) - Overuse (e.g., top-level or nested awaits) can slow startup
- Requires explicit timeouts/cancellation to avoid hanging calls