ES6のpromise.allの使い方は何ですか?

ES6のPromise.allは、複数のPromiseオブジェクトを並行して処理するための静的メソッドです。引数としてPromiseオブジェクトの配列を受け取り、新しいPromiseオブジェクトを返します。

Promise.allは、すべてのPromiseオブジェクトがresolved状態になるまで待ち、戻り値のPromiseオブジェクトのresolveコールバック関数の引数は、すべてのPromiseオブジェクトの結果を含む配列になります。その中のいずれかのPromiseオブジェクトがrejected状態になった場合、戻り値のPromiseオブジェクトのrejectコールバック関数が直ちに呼び出され、rejected状態になった最初のPromiseオブジェクトのエラー情報が渡されます。

以下はサンプルコードです:

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3])
  .then(values => {
    console.log(values); // [3, 42, 'foo']
  })
  .catch(error => {
    console.error(error);
  });

上記の例では、promise1とpromise2はすでに解決済みのPromiseオブジェクトであり、promise3は100ms後に解決状態になるPromiseオブジェクトです。Promise.allはすべてのPromiseオブジェクトが解決状態になるまで待ち、新しいPromiseオブジェクトを返し、すべての結果を配列形式でresolveコールバック関数に渡します。この例では、values配列にはpromise1、promise2、promise3の結果が含まれており、つまり[3、42、’foo’]です。

もし、そのうちのどれか1つのPromiseオブジェクトがrejected状態になった場合、次のようになります。

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(reject, 100, 'Error');
});

Promise.all([promise1, promise2, promise3])
  .then(values => {
    console.log(values);
  })
  .catch(error => {
    console.error(error); // Error
  });

この例では、promise3は100ms後にrejected状態になり、Promise.allは直ちに新しいPromiseオブジェクトを返し、promise3のエラー情報をrejectコールバック関数に渡します。そのため、catchコールバック関数が実行され、”Error”が出力されます。

bannerAds