Promiseオブジェクトのメソッド(all、race)を試す

前回の続きでPromiseオブジェクトのallとraceを試したコードです。

ichiroku11.hatenablog.jp

allとraceの動きを確認するためにまずは次の2つの関数を用意しました。

  • resolveAsync - 指定した時間後にresolveするPromiseを返す関数
  • rejectAsync - 指定した時間後にrejectするPromiseを返す関数

話は少しそれますが、ログで時間を確認するためにConsole.timeStampメソッドを使っています。私の環境では最初TS2339 (TS) プロパティ 'timeStamp' は型 'Console' に存在しません。といったエラーが出ていましたが、ConsoleのインターフェイスにtimeStampメソッドを定義してエラーを解消しました。

interface Console {
    timeStamp(label?: string): void;
}

Declaration Mergingという機能ですね。たぶん。

Declaration Merging · TypeScript

脱線終わり。

Promise.all

Promise.allメソッドは、引数のすべてのPromiseがresolveするとresolveするか、引数のPromiseのどれか1つでもrejectするとrejectするPromiseを返します。

Promise.all() - JavaScript | MDN

resolveする場合

Promise.allメソッド(とawait)は、引数のすべてのPromiseがresolveするまで待った後、引数のPromiseそれぞれの結果を配列として取得できます。以下では3秒待って、3つのPromiseの結果を取得しています。

rejectする場合

引数のPromiseのうちどれか1つがrejectするとすぐに例外がスローされます。以下は1秒後に"エラー2"がrejectしています。

Promise.race

Promise.raceメソッドは、引数のPromiseのどれか1つがresolveするとresolveするか、引数のPromiseのどれか1つがrejectするとrejectするPromiseを返します。

resolveする場合

引数のPromiseのうちどれか1つがresolveするとすぐにresolveしたPromiseの結果を返します。1秒後に"c"がresolveされています。

rejectする場合

引数のPromiseのうちどれか1つがrejectするとすぐに例外がスローされます。1秒後に"エラー2"がrejectしています。

おしまい。