【Node.js24.x】Promise::any()メソッドの使い方
anyメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
anyメソッドは、複数の非同期処理(Promise)の中から、最初に成功したものの結果を取得するメソッドです。このメソッドは、Promiseオブジェクトのイテラブル(例えばPromiseの配列)を引数として受け取ります。そして、引数に渡されたPromiseのいずれか一つでも解決(成功)すれば、その解決値を伴って新しいPromiseを解決します。これにより、複数の並行する非同期処理のうち、最も早く成功した結果を利用したい場合に非常に役立ちます。
もし、引数に渡された全てのPromiseが拒否(失敗)された場合、anyメソッドが返すPromiseはAggregateErrorという特殊なエラーで拒否されます。AggregateErrorは、全ての拒否理由をまとめて含むエラーオブジェクトであり、これにより個々の失敗の詳細をプログラムで効率的に処理することが可能です。
例えば、複数のデータソースから情報を取得する際に、最も速く応答したデータソースの結果を採用したい場合や、複数のAPIエンドポイントの中から利用可能なものを最初に検出したい場合などに有効です。非同期処理の並行実行と、その中から最速の成功結果を選び出すロジックを簡潔に記述できるため、ロバストなアプリケーション開発に貢献します。
構文(syntax)
1const promise1 = new Promise((resolve) => setTimeout(() => resolve('Value from Promise 1'), 100)); 2const promise2 = new Promise((resolve) => setTimeout(() => resolve('Value from Promise 2'), 50)); 3const promise3 = new Promise((resolve, reject) => setTimeout(() => reject(new Error('Promise 3 failed')), 150)); 4 5Promise.any([promise1, promise2, promise3]) 6 .then(value => { 7 console.log(value); 8 }) 9 .catch(error => { 10 console.error(error); 11 });
引数(parameters)
iterable
- iterable: PromiseオブジェクトまたはPromiseオブジェクトに解決される値のiterable(配列など)。Iterable内のいずれかのPromiseがfulfilled(成功)した場合、Promise.any()はそのfulfilledされた値でfulfilledされます。iterableが空の場合、またはiterable内のすべてのPromiseがrejected(失敗)した場合、Promise.any()はAggregateErrorでrejectedされます。
戻り値(return)
Promise<any>
Promise.any()メソッドは、引数として渡されたPromiseの配列のうち、最初に解決されたPromiseの値を解決値として持つ新しいPromiseを返します。もし、すべてのPromiseが拒否された場合は、それらの拒否理由をすべて含むAggregateErrorを拒否値として持つPromiseを返します。