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

更新日:2024/06/14

初出:ECMAScript2020


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

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

 

■構文

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

 

■遷移条件

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

▶fulfilled(履行)へ遷移

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

その際のfulfilled値は、個々のPromiseオブジェクトの結果を表すオブジェクトの配列です。

{
  state: "fulfilled" または "rejected"
  value: stateが "fulfilled" の時存在。fulfilled値
  reason: stateが "rejected" の時存在。rejected値
}

▶rejected(拒否)へ遷移

rejectedへの移行は、ありません。

 

■使用例

  // 1000ミリ以上はタイムオーバーとしてrejectする
const s = t => new Promise(
    (resolve,reject)=>setTimeout(()=>{
        t > 1000 ?  reject(t) : resolve(t);
    },t));

Promise.allSettled( [s(1000),s(1500),s(2000),s(600)] )
    .then( v=>{
        v.forEach(
            e=>{
              const {alert,time} = e.status==="rejected" ?
                    {alert:"タイムオーバー",time:e.reason}
                    :{alert:"",time:e.value};
            console.log(
                `${alert}:${time}ミリ秒待機しました`
            );
        }
      );
    });
// 結果:
// :1000ミリ秒待機しました
// タイムオーバー:1500ミリ秒待機しました
// タイムオーバー:2000ミリ秒待機しました
// :600ミリ秒待機しました

更新日:2024/06/14

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

スポンサーリンク

記事の内容について

null

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

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

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

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

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

 

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