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.all() は静的メソッドで、入力としてプロミスの集合の反復可能オブジェクトを取り、単一の Promise を返します。この返却されたプロミスは、入力されたプロミスがすべて履行されたとき(空のイテレーターが渡されたときを含む)、その履行された値の配列で、履行されます。入力されたプロミスのいずれかが拒否されると、その最初の拒否理由とともに拒否されます。
反復可能オブジェクト(プロミスの配列 (Array) など)。
次のような Promise です。
Promise.all() メソッドは、プロミスの並行処理メソッドのうちの一つです。このメソッドは、複数のプロミスの結果を集約するのに便利です。このメソッドは、コード全体が正常に動作するために依存している複数の関連する非同期タスクがあり、コードの実行を続ける前にそれらすべてを履行させたい場合によく使われます。
メモ: 日本語の技術文書では、このメソッドが複数のプロミスを並列に処理すると説明されることがありますが、実際には複数のスレッドでプロミスが処理されるわけではないことに注意してください。詳細はプロミスの並行処理を参照してください。
Promise.all() は、入力されたプロミスのいずれかが拒否されると直ちに拒否されます。それに対して、Promise.allSettled() が返すプロミスは、入力されたプロミスのいずれかが拒否されたかどうかに関わらず、すべての入力されたプロミスが完了するのを待ちます。入力された反復可能オブジェクトに含まれるプロミスのすべての最終結果が必要な場合は、allSettled() を使用してください。
Promise.all はすべての履行(または最初の拒否)を待ちます。
反復可能オブジェクトにプロミスではない値が含まれる場合は無視されますが、(プロミスが履行された場合)返されるプロミスの配列の値にはカウントされます。
以下の例では Promise.all の非同期性(または渡された反復可能オブジェクトが空の場合、同期性)を実演します。
Promise.all が拒否されたときも同じことが起きます。
しかし、Promise.all は渡された反復可能オブジェクトが空の場合だけ同期的に解決します。
非同期関数内では、コードを「過剰に待つ」ことはとてもよくあることです。例えば、以下のような関数が指定されたとします。
次のように関数を書くかもしれません。
ただし、promptForDishChoice と fetchPrices の実行は、互いの結果には依存しないことに注意してください。ユーザーが料理を選んでいる間、バックグラウンドで価格が取得されても問題ありませんが、上記のコードでは await 演算子によって選択が行われるまで非同期関数が一時停止し、その後価格が取得されるまで再度一時停止します。Promise.all を使用すれば、結果が指定される前にユーザーが価格の取得を待たずに、これらを並行して実行することができます。
Promise.all はエラー処理が直感的であるため、ここでの並行処理メソッドには最適な選択です。もしいずれかのプロミスが拒否されたら、結果がもう利用できなくなり、 await 式全体が例外を発生します。
Promise.all は、プロミスの反復可能オブジェクトを受け取ります。したがって、複数の非同期関数を同時に実行するためにこれを使用する場合は、非同期関数を呼び出し、返されたプロミスを使用する必要があります。関数はプロミスではないため、関数を Promise.all に直接渡しても動作しません。
Promise.all は要素のひとつでも拒否されると拒否します。例えば、タイムアウト後に 4 つのプロミスが解決しても、 1 つのプロミスが直ちに拒否された場合、 Promise.all は直ちに拒否されます。
この動作は失敗する可能性を制御することで変更することができます。
| ECMAScript® 2027 Language Specification # sec-promise.all |
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.