Tips

今日の開発Tips(2025-05-29)

JavaScriptの非同期処理でよく使われる`Promise.all`は、複数のPromiseを同時に実行し、全てが解決された結果を配列で返す便利なメソッドです。しかし、いずれかのPromiseがrejectされた場合、処理全体が中断されます。このTipsでは、`Promise.allSettled`を使って、全てのPromiseの結果を確実に取得する方法を紹介します。

Promise.allSettledで全てのPromise結果を取得する

Promise.allSettledは、Promise.allと同様に複数のPromiseを同時に実行しますが、いずれかのPromiseがrejectされても、他のPromiseの実行を中断しません。全てのPromiseが完了した後に、各Promiseの結果(fulfilledまたはrejected)を含む配列を返します。これにより、エラーハンドリングが容易になり、複数の非同期処理を確実に完了させることができます。

const promise1 = Promise.resolve(1);
const promise2 = Promise.reject(new Error('Rejected!'));
const promise3 = Promise.resolve(3);

Promise.allSettled([promise1, promise2, promise3])
  .then((results) => {
    results.forEach((result) => {
      if (result.status === 'fulfilled') {
        console.log('fulfilled:', result.value);
      } else {
        console.log('rejected:', result.reason);
      }
    });
  })
  .catch((error) => {
    console.error('Unexpected error:', error);
  });

注意点:Promise.allSettledは、全てのPromiseが完了するまで待機するため、Promise.allに比べて処理時間が長くなる可能性があります。また、Promise.allSettledは、全てのPromiseの結果を受け取る必要がある場合に有効です。特定のPromiseの結果のみが必要な場合は、Promise.allの方が効率的です。

おすすめポイント:複数の非同期処理の結果を確実に取得し、エラーを個別に処理したい場合に非常に有効です。エラーハンドリングのロジックが簡潔になり、プログラムの堅牢性を向上させることができます。