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ブロックでエラーを捕捉することを優先してください。 また、このイベントリスナーはアプリケーション全体で一度だけ設定すれば十分です。 大量のエラーログが出力されるのを防ぐため、ログ出力の頻度や内容を調整する必要があります。
おすすめポイント:この手法は、特に複数のモジュールやライブラリを使用する大規模なアプリケーションにおいて、予期せぬクラッシュを防ぐ上で非常に有効です。 安定したアプリケーション開発に役立ちます。