JavaScript

Promise.all()メソッド

 編集:2022.07.29 by T.A.

入力としてプロミスの集合の反復可能オブジェクトを取り、入力したプロミスの集合の結果の配列に解決される単一の Promise を返します。→

この返却されたプロミスは、入力したプロミスがすべて解決されるか、入力した反復可能オブジェクトにプロミスが含まれていない場合に解決されます。入力したプロミスのいずれかが拒否されるか、プロミス以外のものがエラーを発生させると直ちに拒否され、最初に拒否されたメッセージまたはエラーをもって拒否されます。

Promise.all(iterable)
iterable 反復可能オブジェクト、例えば Array など。
戻り値

Promise.all はすべての履行(または最初の拒否)を待ちます。

var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("foo");
  }, 100);
});

Promise.all([p1, p2, p3]).then(values => {
  alert(values);	//→[3, 1337, "foo"]
});

反復可能オブジェクトにプロミスではない値が含まれる場合は無視されますが、(プロミスが履行された場合)返されるプロミスの配列の値にはカウントされます。

// これは、渡された反復可能オブジェクトが空であるかのようにカウントされるので、履行される
var p = Promise.all([1,2,3]);
// これは、渡された反復可能オブジェクトに、 "444" の値で解決されたプロミスだけが含まれているようにカウントされるので、履行される
var p2 = Promise.all([1,2,3, Promise.resolve(444)]);
// これは、渡された反復可能オブジェクトに、 "555" の値で拒否されたプロミスだけが含まれているようにカウントされるので、拒否される
var p3 = Promise.all([1,2,3, Promise.reject(555)]);

// setTimeout を使うことで、スタックが空になってからコードを実行することができる
setTimeout(function() {
  alert(p);
  alert(p2);
  alert(p3);
});

ログ:

Promise { <state>: "fulfilled", <value>: Array[3] }

Promise { <state>: "fulfilled", <value>: Array[4] }

Promise { <state>: "rejected", <reason>: 555 }

¶省く


テスト