Promise.race & allSettled
Advanced Promise combinators
const delay = (ms, val) =>
new Promise(r => setTimeout(() => r(val), ms));
const fail = (ms, msg) =>
new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), ms));
(async () => {
// race: first to settle wins
const fastest = await Promise.race([
delay(200, "slow"),
delay(50, "fast"),
delay(100, "medium"),
]);
console.log("race winner:", fastest);
// race as timeout
try {
const result = await Promise.race([
delay(500, "real result"),
fail(200, "Timeout after 200ms"),
]);
console.log("got:", result);
} catch (e) {
console.error("error:", e.message);
}
// allSettled: every outcome
const outcomes = await Promise.allSettled([
delay(50, "ok"),
fail(100, "oops"),
delay(75, "also ok"),
]);
outcomes.forEach((o, i) => {
if (o.status === "fulfilled") console.log(`${i}: ✓ ${o.value}`);
else console.log(`${i}: ✗ ${o.reason.message}`);
});
})();