MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Promise.all()

Promise.all(iterable)メソッドは、反復引数のすべてのプロミスが完了したとき完了したプロミスを返すか、与えられたプロミスの中で最初の失敗理由とともに失敗したプロミスを返します。

構文

Promise.all(iterable);

引数

iterable
Arrayのような反復オブジェクト。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

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: akiomik, shide55
 最終更新者: akiomik,