Untry を使用した JavaScript でのエラー処理の簡素化

Patricia Arquette
リリース: 2024-10-16 06:23:02
オリジナル
547 人が閲覧しました

Simplifying Error Handling in JavaScript with Untry

エラー処理はソフトウェア開発の重要な側面であり、アプリケーションの安定性と使いやすさを確保します。ただし、JavaScript でのエラーの管理は面倒で時間がかかる場合があります。そこで、エラー処理を簡素化する軽量ライブラリである Untry が登場します。

JavaScript のエラー処理。

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 の仕組み

Untry は関数を実行し、内部のエラーをキャッチし、結果の値とスローされたエラーを含む配列を返します。これは、エラーを管理し、コードをより堅牢にし、読みやすく、保守しやすくするためのシンプルなソリューションです。

import untry from 'untry';

let [value, error] = untry(() => {
  // code that might throw an error
});
ログイン後にコピー

主な利点

  • 簡素化されたエラー処理
  • 明示的なエラー管理
  • 失敗時の簡単なクリーンアップ
  • カスタマイズ可能なエラー処理
  • 開発を合理化します

Untry を使用すると、次のことが可能になります。

  • より堅牢なコードを作成する
  • 定型的なエラー処理を削減
  • トライキャッチ地獄から脱出

NPM パッケージ: https://www.npmjs.com/package/untry

以上がUntry を使用した JavaScript でのエラー処理の簡素化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!