Tips

今日の開発Tips(2025-06-01)

JavaScriptでエラーハンドリングを行う際、try...catchブロックだけでは不十分な場合があります。特に、非同期処理におけるエラーは、try...catchブロックの外で発生することがあります。そこで、`process.on('unhandledRejection')`イベントリスナーを活用することで、非同期処理で発生した未処理のPromise拒否をキャッチし、適切に処理することができます。これにより、アプリケーションのクラッシュを防ぎ、安定性を向上させることができます。

JavaScriptにおける未処理のPromise拒否のキャッチ

非同期処理において、Promise.reject()で発生したエラーがcatchブロックで処理されず、未処理のままになっていると、アプリケーションが予期せずクラッシュする可能性があります。process.on('unhandledRejection')を使用することで、これらの未処理のPromise拒否をグローバルにキャッチできます。

process.on('unhandledRejection', (reason, promise) => {
  console.error('Unhandled Promise rejection:', reason);
  // エラーログ出力など、適切なエラー処理を追加する
});

// 例:エラーが発生するPromise
const myPromise = new Promise((resolve, reject) => {
  // エラーが発生する処理
  reject(new Error('Something went wrong!'));
});

myPromise; // このPromiseはcatchブロックで処理されないため、unhandledRejectionイベントが発生する

注意点:unhandledRejectionイベントは、エラー処理の最終手段として使用し、できるだけtry...catchブロックでエラーを捕捉することを優先してください。 また、このイベントリスナーはアプリケーション全体で一度だけ設定すれば十分です。 大量のエラーログが出力されるのを防ぐため、ログ出力の頻度や内容を調整する必要があります。

おすすめポイント:この手法は、特に複数のモジュールやライブラリを使用する大規模なアプリケーションにおいて、予期せぬクラッシュを防ぐ上で非常に有効です。 安定したアプリケーション開発に役立ちます。