Promiseオブジェクトのメソッド(all、race)を試す
前回の続きでPromiseオブジェクトのallとraceを試したコードです。
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しています。
おしまい。