Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
Promise.race() は静的メソッドで、入力としてプロミスの反復可能オブジェクトを受け取り、単一の Promise を返します。この返されたプロミスは、最初に決定したプロミスの最終的な状態で決定されます。
反復可能オブジェクト(プロミスの Array など)です。
Promise で、反復可能オブジェクトの最初のプロミスの最終的な状態で非同期に決定します。言い換えると、最初に決定されたプロミスが履行されれば履行され、最初に決定されたプロミスが拒否されれば拒否されます.返されるプロミスは、渡された反復可能オブジェクトが空の場合、永久に待機状態になります。渡された反復可能オブジェクトが空ではないが、待機中のプロミスを含んでいなかった場合、返されたプロミスは(同期的ではなく)非同期的に決定されます。
Promise.race() メソッドはプロミス並行処理メソッドの 1 つです。これは最初の非同期タスクを完全に完了させたいが、最終的な状態は気にしない(つまり、成功も失敗もあり得る)場合に有用です。
メモ: 日本語の技術文書では、このメソッドが複数のプロミスを並列に処理すると説明されることがありますが、実際には複数のスレッドでプロミスが処理されるわけではないことに注意してください。詳細はプロミスの並行処理を参照してください。
反復可能オブジェクトに 1 つ以上の非プロミス値および/または既に確定したプロミスが格納されている場合、 Promise.race() は反復可能オブジェクトで最初に見つかった値に確定します。
この例では、 Promise.race() を使用して、setTimeout() で実装された複数のタイマーを競わせることができることを示しています。最も時間の短いタイマーが常にレースに勝ち、結果のプロミスの状態となります。
以下の例では、 Promise.race の非同期性を示しています。他のプロミス並行処理メソッドとは異なり、 Promise.race は常に非同期です。反復可能オブジェクトが空の場合でも、決して同期的に解決することはありません。
空の反復可能オブジェクトを渡すと、無限に解決しないプロミスが返されます。
反復可能オブジェクトの中に 1 つ以上のプロミス以外の値や、すでに解決したプロミスが含まれていると、 Promise.race は配列の中で見つかった最初のこれらの値で解決します。
長くなりそうなリクエストを拒否するタイマーを保有し、制限時間が経過したときに、結果のプロミスが自動的に拒否されるようにレースすることができます。
data のプロミスが履行された場合は、 /api から取得されたデータが格納されます。そうでない場合は、 fetch が 5 秒間待機していた場合に拒否され、 setTimeout タイマーとの競争に負けたことになります。
Promise.race() は反復可能オブジェクトの中で最初に待機していないプロミスに解決するため、待機しているかどうかを含めてプロミスの状態を調べることができます。この例は promise-status-async から引用しています。
この関数では、 promise が待機中であれば、 2 つ目の値である pendingState が、プロミスではなく、レースの結果になります。それ以外の場合、 promise が既に決定されていれば、 onFulfilled と onRejected ハンドラーによってその状態を知ることができるでしょう。例えば次のようになります。
メモ: promiseState 関数は非同期で実行されます。プロミスの値を同期的に取得する方法がないからです(つまり、 then() や await がない場合)、たとえプロミスが既に決定されていたとしてもです。しかし、promiseState() は常に 1 ティック以内に履行され、実際にプロミスの決定を待つことはありません。
Promise.race は最初に決定された Promise を取ります。
Promise.any は最初に履行された Promise を取ります。
| ECMAScript® 2027 Language Specification # sec-promise.race |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年8月21日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.