【JSリファレンス】Promise.any()

更新日:2024/06/14

初出:ECMAScript2021


Promise.any()は、Promiseコンストラクターのメソッドです。

引数で複数のPromiseオブジェクトを受け取り、どれか一つがfulfilled(履行)に状態遷移するのを待つPromiseオブジェクトを生成して返します。

 

■構文

Promise.any ( iterable )
  1. iterable: Promiseオブジェクトを返すイテラブルなオブジェクト
生成されたPromiseオブジェクト

 

■遷移条件

生成されたオブジェクトは、次の条件で pending(保留)から他の状態へ遷移します。

▶fulfilled(履行)へ遷移

条件: 与えられたPromiseオブジェクトのどれか一つの状態が fulfilled に遷移した場合。

その際のfulfilled値は、最初にfulfilledに遷移したオブジェクトの値です。

▶rejected(拒否)へ遷移

条件: 与えられた全てのPromiseオブジェクトの状態が rejected に遷移した場合。または、空の配列を引数で渡した場合。

その際のrejected値は、AggregateErrorオブジェクトです。

 

■使用例

fulfilledされる例

  // 1000ミリ未満はrejectする
const s = t => new Promise(
    (resolve,reject)=>setTimeout(()=>{
        t < 1000 ?  reject(t) : resolve(t);
    },t));

Promise.any( [s(500),s(200),s(2000),s(600)] )
    .then( v=>{
            console.log( `${v}ミリ秒待機しました` );
        }
      );
// 結果:
// 2000ミリ秒待機しました

rejectedされる例

  // 1000ミリ未満はrejectする
const s = t => new Promise(
    (resolve,reject)=>setTimeout(()=>{
        t < 1000 ?  reject(t) : resolve(t);
    },t));

Promise.any( [s(500),s(200),s(300),s(600)] )
    .then( v=>{
            console.log( `${v}ミリ秒待機しました` );
        },v=>{
            console.log( "既定時間未満でした" );
            v.errors.forEach(e => {
                console.log( `${e}ミリ秒待機しました` );
            });
            
        }
      );
// 結果:
// 既定時間未満でした
// 500ミリ秒待機しました
// 200ミリ秒待機しました
// 300ミリ秒待機しました
// 600ミリ秒待機しました

更新日:2024/06/14

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://jsref.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。