ホームページ > 記事 > ウェブフロントエンド > Untry を使用した JavaScript でのエラー処理の簡素化
エラー処理はソフトウェア開発の重要な側面であり、アプリケーションの安定性と使いやすさを確保します。ただし、JavaScript でのエラーの管理は面倒で時間がかかる場合があります。そこで、エラー処理を簡素化する軽量ライブラリである Untry が登場します。
JavaScript のエラー処理は try-catch ブロックに依存しているため、特にネストされた非同期呼び出しを処理する場合、扱いにくく、管理が困難になる可能性があります。このアプローチにより、次のような問題が発生する可能性があります。
過度に複雑で深くネストされた try-catch ブロックはメンテナンスの悪夢を引き起こします。複数の層の try-catch ステートメントを使用してエラーを処理しようとすると、コードの難読化、エラーのマスキング、および飲み込まれた例外が発生します。非同期コードとコールバックは問題を悪化させます。
JavaScript での try-catch エラー処理がいかに複雑になるかを例を見てみましょう。製品の詳細を取得する eCommerce API エンドポイントを取得します:
app.get('/product/:id', async (req, res) => { try { const product = await fetchProduct(req.params.id) const reviews = await fetchReviews(req.params.id) res.json({ product, reviews }) } catch (error) { res.status(500).send('Something went wrong!') } });
fetchProduct または fetchReviews のいずれかが失敗すると、同じ一般的な応答が返されます。
非同期呼び出しごとにエラーを個別に処理できる方法でリファクタリングし、それぞれのケースで何をすべきかを決定しましょう。
app.get('/product/:id', async (req, res) => { let product let reviews let productError let reviewsError // product try { product = await fetchProduct(req.params.id) } catch (error) { productError = error } if (productError) { res.status(500).json({ error: productError }) return } // reviews try { reviews = await fetchReviews(req.params.id) } catch (error) { reviewsError = error } if (reviewsError) { res.status(500).json({ error: reviewsError }) return } // final response res.json({ product, reviews }) })
コードは各ケースを個別に処理するようになりましたが、可読性が低く、保守性も低いように見えます。
Untry を使用して、可読性をあまり犠牲にすることなく各ケースを個別に処理できるようにしましょう:
app.get('/product/:id', async (req, res) => { let [product, productError] = await untry(() => fetchProduct(req.params.id)) if (productError) { res.status(500).json({ error: productError }) return } let [reviews, reviewsError] = await untry(() => fetchReviews(req.params.id)) if (reviewsError) { res.status(500).json({ error: reviewsError }) return } res.json({ product, reviews }) })
Untry は、Go のエラー処理哲学からインスピレーションを得た軽量の JavaScript ライブラリです。このアプローチにより、try-catch フローが排除されます。エラーを例外ではなく値として使用して、明示的なエラー管理を可能にします。
Untry は関数を実行し、内部のエラーをキャッチし、結果の値とスローされたエラーを含む配列を返します。これは、エラーを管理し、コードをより堅牢にし、読みやすく、保守しやすくするためのシンプルなソリューションです。
import untry from 'untry'; let [value, error] = untry(() => { // code that might throw an error });
NPM パッケージ: https://www.npmjs.com/package/untry
以上がUntry を使用した JavaScript でのエラー処理の簡素化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。