Promise.any()
Promise.any() は複数の Promise を受け取り、最初に fulfilled になった Promise の値を返します。レース条件やフォールバック戦略の実装に便利です。
概要
Promise.any() は複数の Promise を受け取り、最初に fulfilled になった Promise の値を返します。レース条件やフォールバック戦略の実装に便利です。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 85 | 85 | 79 | 14 | 85 | 14 | |
| AggregateError() コンストラクターは AggregateError オブジェクトを生成します。 | 85 | 85 | 79 | 14 | 85 | 14 |
| errors は AggregateError インスタンスのデータプロパティで、集約されたエラーを表す配列を保持します。 | 85 | 85 | 79 | 14 | 85 | 14 |
| シリアライズ可能オブジェクトは、どのような JavaScript 環境 ("realm") でもシリアライズし、後でデシリアライズすることができるオブジェクトです。 これは例えば、ディスクに格納し後から復元したり、structuredClone() で複製したり、DedicatedWorkerGlobalScope.postMessage() を使用してワーカー間で共有したりすることができます。 | 98 | 98 | 103 | 17 | 98 | 17 |
| Promise.any() は静的メソッドで、入力としてプロミスの反復可能オブジェクトを取り、単一の Promise を返します。この返されたプロミスは、入力のプロミスのいずれかが履行されたときに、この最初の履行値で履行されます。入力のプロミスがすべて拒否された場合(空の反復可能オブジェクトが渡された場合を含む)、拒否理由の配列を格納した AggregateError で、拒否されます。 | 85 | 85 | 79 | 14 | 85 | 14 |
- AggregateError` は、追加のプロパティなしで `Error` 型にシリアライズされる。
- AggregateError` は、追加のプロパティなしで `Error` 型にシリアライズされる。
- AggregateError` は `AggregateError` 型にシリアライズされ、プロパティ `name`、`message`、`cause`、`errors` を持つ。
- AggregateError` は、追加のプロパティなしで `Error` 型にシリアライズされる。
基本構文
// Fetch the resource from the fastest CDN
const resource = await Promise.any([
fetch('https://cdn1.example.com/data'),
fetch('https://cdn2.example.com/data'),
fetch('https://cdn3.example.com/data'),
]);
console.log(resource); // The first successful response ライブデモ
実務での使いどころ
-
Promise.any() の活用
複数の Promise のうち最初に成功したものの結果を返す。すべて失敗した場合のみ AggregateError をスローする。
注意点
- 特になし。すべての主要ブラウザで安定して動作する。
アクセシビリティ
- JavaScript による動的更新時は、aria-live リージョンで変更をスクリーンリーダーに通知する。
参考リンク
Powered by web-features