A structured lesson workspace with readable content, hands-on examples, and a clean path to completion.
| Question to ask | Good diagnostic move |
|---|---|
| What value entered? | Inspect the runtime value and type. |
| What rule applied? | Check the construct's language or host semantics. |
| What changed? | Compare the smallest working and failing cases. |
const result = Promise.resolve(21).then(value => value * 2).catch(error => console.error(error));result.then(console.log);
<strong>Core idea:</strong> Asynchronous JavaScript is about managing time and failure without freezing the user interface. Promises and async functions make that control explicit. In this lesson, the practical target is promise.all, promise.allsettled, promise.race, and promise.any: you should be able to predict what the runtime will do before changing the code.
Mentor note: for promise.all, promise.allsettled, promise.race, and promise.any, name the invariant you need before reaching for a clever shortcut. Clear state and explicit assumptions make later debugging much cheaper.
Finish the lesson once you have worked through the material. This awards ★ 20 XP.