この記事は編集レビューを必要としています。ぜひご協力ください。
Promise.all(iterable)
メソッドは、反復引数のすべてのプロミスが完了したとき完了したプロミスを返すか、与えられたプロミスの中で最初の失敗理由とともに失敗したプロミスを返します。
構文
Promise.all(iterable);
引数
説明
すべてのプロミスから値の配列として結果が渡されます。反復配列で渡された引数がプロミスでないなら、Promise.resolve
によって変換されます。プロミスにわたされた引数がリジェクトされたら、すべての
プロミスはすぐにそのリジェクトした値でリジェクトします。完了しているかどうかに関係なく、すべての他のプロミスを破棄します。空の配列が渡された場合、このメソッドは直ちに完了します。
例
Promise.all
の使用
Promise.all
はすべての成功(または最初の失敗)を待ちます。
var p1 = Promise.resolve(3); var p2 = 1337; var p3 = new Promise(function(resolve, reject) { setTimeout(resolve, 100, "foo"); }); Promise.all([p1, p2, p3]).then(function(values) { console.log(values); // [3, 1337, "foo"] });
Promise.all
のフェイルファストの挙動
Promise.all
は要素のひとつが失敗したときに失敗し、フェイルファスト(fail fast)します。タイムアウト後に完了する4つのプロミスと、すぐに失敗する1つのプロミスが存在するとき、Promise.all
は直ちに失敗します。
var p1 = new Promise(function(resolve, reject) { setTimeout(resolve, 1000, "one"); }); var p2 = new Promise(function(resolve, reject) { setTimeout(resolve, 2000, "two"); }); var p3 = new Promise(function(resolve, reject) { setTimeout(resolve, 3000, "three"); }); var p4 = new Promise(function(resolve, reject) { setTimeout(resolve, 4000, "four"); }); var p5 = new Promise(function(resolve, reject) { reject("reject"); }); Promise.all([p1, p2, p3, p4, p5]).then(function(value) { console.log(value); }, function(reason) { console.log(reason) }); //From console: //"reject"
仕様
仕様 | 状況 | コメント |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Promise.all の定義 |
標準 | Initial definition in an ECMA standard. |
ECMAScript 2017 Draft (ECMA-262) Promise.all の定義 |
ドラフト |
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | 32 | 29.0 (29.0) | 未サポート | 19 | 7.1 |
機能 | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|
基本サポート | 未サポート | 29.0 (29.0) | 未サポート | 未サポート | iOS 8 | 32 |