JavaScriptでのPromise配列の操作

ここでは、Promise配列を扱うのに便利な2つのメソッドを 解説します。 メソッド Promise.all は、 配列として渡されたすべてのPromiseが完了するまで コードの実行を待機し、 メソッド Promise.race は、 配列内の最初のPromiseが完了するのを待ち、 残りを破棄します。

両メソッドは、その結果として新しいPromiseを 返します。メソッド Promise.all の結果である このPromiseの値は、渡されたすべてのPromiseの 結果を集めた配列になります (結果の順序は配列内のPromiseの順序に対応します)。 一方、Promise.race の結果は、 最初に完了したPromiseの結果になります。

実際に見てみましょう。以下のようなPromiseの配列があるとします:

javascriptlet promises = [
  new Promise(resolve => setTimeout(() => resolve(1), 1000)),
  new Promise(resolve => setTimeout(() => resolve(2), 2000)),
  new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];

Promise.all を使用して、 配列内のすべてのPromiseの完了を待ってみましょう:

javascriptPromise.all(promises).then(function(res) {
  console.log(res); // [1, 2, 3] と表示されます - すべてのPromiseの結果
});

次に、Promise.race を使用して、 配列内の最初のPromiseの完了を待ってみましょう:

javascriptPromise.race(promises).then(function(res) {
  console.log(res); // 1 と表示されます - 最初に完了したPromiseの結果
});

配列内のPromiseのうち1つでも拒否(rejected)されると、 結果を表すPromiseは即座に rejected 状態に 移行します。したがって、 発生した例外は、例えば catch を通じて、 これまで学習した通常の方法で捕捉することができます:

javascriptPromise.all(promises).then(function(res) {
  console.log(res);
}).catch(function(err) {
  console.log(err);
});
Задание 1

内部に1秒から 10 秒までのランダムな遅延が 設定されたPromiseを返す関数を作成してください。 Promiseは、この遅延時間をその結果として返すものとします。 ループとあなたの関数を使用して、 配列を 10 個のPromiseで埋めてください。

Задание 2

前のタスクで作成したPromise配列を使用して、 コンソールに最初に完了したPromiseの結果が 表示されるようにしてください。

Задание 3

前のタスクで作成したPromise配列を使用して、 コンソールにすべてのPromiseの結果の合計が 表示されるようにしてください。