Hint
all=all resolve, allSettled=wait all, race=first settles, any=first resolves
const fast = fetch('/fast'); // 100ms
const slow = fetch('/slow'); // 500ms
const bad = fetch('/broken'); // 200ms, rejects
await Promise.all([fast, slow]); // ✅ 500ms (waits for both)
await Promise.all([fast, bad]); // ❌ rejects at 200ms
const results = await Promise.allSettled([fast, slow, bad]);
// [{status:'fulfilled', value:...}, ..., {status:'rejected', reason:...}]
await Promise.race([fast, slow]); // resolves at 100ms with fast result
await Promise.any([bad, fast]); // resolves at 100ms (ignores bad)
// Timeout pattern with race:
const withTimeout = (p, ms) => Promise.race([
p,
new Promise((_, r) => setTimeout(() => r(new Error('Timeout')), ms))
]);