DOM

Promise.race()メソッド

 編集:2022.07.29 by T.A.

反復可能オブジェクトの中のプロミスのうちの 1 つが履行されるか拒否されると、そのプロミスの値または理由で履行または拒否されるプロミスを返します。

Promise.race(iterable);
iterable 配列(Array)などの反復可能なオブジェクト。「」を確認してください。
戻り値

待ち状態の Promise で、反復可能オブジェクトの中で最初に履行または解決されたプロミスの値を非同期に産出します。

解説

race 関数は、引数として渡された反復可能オブジェクトの中にある複数のプロミスの中で決定した最初のプロミスと同じ方法で決定される(同じ値を取る)プロミスを返します。

渡された反復可能オブジェクトが空の場合、返されるプロミスは永遠に待機状態のままです。

反復可能オブジェクトに 1 つ以上のプロミス以外の値やすでに決定済みのプロミスが含まれていた場合、Promise.race は反復可能オブジェクトの中で見つけたこれらの値の内の最初の一つで解決します。

Promise.race の非同期性

Promise.race の非同期性を示しています。

//Promise.rac eをできるだけ早く起動させるために、解決済みのプロミスの配列を引数として渡しています。
var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
var p = Promise.race(resolvedPromisesArray);
D=p;

//setTimeout を使用すると、スタックが空になった後でコードが実行される
setTimeout(function(){
    alert('スタックが空です');
    alert(p);
});

//ログ、順番に:
//Promise:{ : "pending" }
//スタックが空です
//Promise:{ : "fulfilled", : 33 }
AggregateError での拒否

Promise.any() は履行されたプロミスがないと AggregateError で拒否されます。

const pErr = new Promise((resolve, reject) => {
  reject('Always fails');
});

Promise.any([pErr]).catch((err) => {
  alert(err);
})
//出力: "AggregateError: No Promise in Promise.any was resolved"

¶省く


テスト