問題一覧に戻る
中級async
問題98: Promise.race

Promise.raceによる競争的実行を学びましょう。Promise.raceは複数のPromiseを同時に実行し、最初に完了(解決または拒否)したものの結果を返します。タイムアウト処理の実装、最速のサーバーからのレスポンス取得、キャンセル可能な操作の実装などに活用されます。例えば、APIコールと5秒以内に完了しなければタイムアウトエラーを返すような処理を簡潔に実装できます。

const delay = (ms, value) => {
return new Promise(resolve => {
setTimeout(() => resolve(value), ms);
});
};

async function main() {
const promises = [
delay(300, "遅い"),
delay(100, "速い"),
delay(200, "普通")
];

const winner = await Promise.(promises);
console.log(`勝者: ${winner}`);

// Timeout pattern
const timeout = delay(500, "タイムアウト");
const operation = delay(1000, "データ");

const result = await Promise.([operation, timeout]);
console.log(`結果: ${result}`);
}

main();