race: 最初に完了したものを返す。any: 最初に成功したものを返す
// ── Promise.race: 最初に完了したものを返す ───────────────
// 成功でも失敗でも、最初に終わったものが勝者
// ← タイムアウト処理に使うのが典型的
const timeout = new Promise((_, reject) =>
setTimeout(() => reject(new Error('タイムアウト')), 3000)
);
try {
const result = await Promise.race([
fetch('/api/data'), // 3秒以内に完了すれば成功
timeout, // 3秒を超えたらエラー
]);
console.log('成功:', result);
} catch (e) {
console.error('失敗またはタイムアウト:', e.message);
}
// ── Promise.any: 最初に「成功」したものを返す ──────────
// race と違い、失敗は無視して最初の成功を待つ
// 全て失敗した場合のみ AggregateError を throw する
const fastest = await Promise.any([
fetch('https://cdn1.example.com/data'), // どれか1つが成功すれば
fetch('https://cdn2.example.com/data'), // 最も速いものを使う
fetch('https://cdn3.example.com/data'), //(CDNの冗長化など)
]);タイムアウト処理はraceで手軽に実装できる。anyは複数のフォールバックから最初の成功を取る場合に使う。