【Node.js24.x】Promise::all()メソッドの使い方
allメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
allメソッドは、複数のPromiseインスタンスを並行して実行し、その結果をまとめて処理するPromiseを生成するメソッドです。これは、Promiseクラスの静的メソッドとして提供されています。
このメソッドは、PromiseインスタンスまたはPromiseのようなオブジェクト(Promise-like)を含むイテラブル(配列など)を引数として受け取ります。そして、受け取った全てのPromiseが成功(fulfilled)するまで待機し、新しいPromiseを返します。
全てのPromiseが成功した場合、それぞれのPromiseが解決した値が、引数で渡された順番と同じ並びで配列にまとめられ、その配列を新しいPromiseの解決値として返します。もし空のイテラブルが渡された場合は、空の配列で解決するPromiseを返します。
一方、引数で渡されたPromiseのうち、どれか一つでも失敗(rejected)した場合、allメソッドによって生成された新しいPromiseは、最初に失敗したPromiseのエラー理由をもって直ちに失敗します。このとき、他のPromiseが成功するか失敗するかを待つことはありません。
このメソッドは、複数の独立した非同期処理を同時に開始し、それら全ての完了を待ってから次の処理に進めたい場合に非常に役立ちます。例えば、複数の外部APIからデータを同時に取得し、全てのデータが揃ってから初めて画面を更新するといったシナリオで活用されます。
構文(syntax)
1const promise1 = Promise.resolve(3); 2const promise2 = new Promise(resolve => setTimeout(() => resolve('foo'), 100)); 3const promise3 = Promise.resolve('bar'); 4 5Promise.all([promise1, promise2, promise3]) 6 .then(values => { 7 // 全てのPromiseが成功した場合、ここに結果の配列が届く 8 // 例: values は [3, 'foo', 'bar'] となる 9 }) 10 .catch(error => { 11 // いずれかのPromiseが失敗した場合、最初のエラーがここに届く 12 });
引数(parameters)
iterable
- iterable: PromiseオブジェクトまたはPromiseに解決される値のイテラブル(配列、Map、Setなど)
戻り値(return)
Promise<Array<unknown>>
Promise.allメソッドは、指定されたイテラブル(通常は配列)内のすべてのPromiseが解決されたときに解決される新しいPromiseを返します。この新しいPromiseは、元のPromiseの解決値の配列を、元のPromiseと同じ順序で保持します。