The idea
Node.js supports asynchronous I/O so requests can wait for external work without each blocking the JavaScript event loop. An async function returns a promise, but adding async does not move heavy CPU computation off the main JavaScript thread. Await required work and handle failures deliberately.
Worked example
Waiting for a database result can use a promise. A large synchronous calculation still occupies the event loop and can delay unrelated requests. Responding before a required save finishes may tell a client success even if the save later fails.
Try it
Draw the sequence of receiving a request, awaiting a fictional database save and sending a response. Add a failure path. Explain why a CPU-heavy loop needs a different strategy from asynchronous I/O and why required work should not be left unobserved.
