2

Node.jsでデータ処理システムを書いています。

データの一部はユーザーが提供するか、外部ソースから取得されるため、

  • それらはさまざまな方法で奇形になる可能性があります。
  • それらはあいまいになる可能性があります。
  • それらは互いに矛盾する可能性があります。

そのような場合、私は通常、それについてユーザーに警告したいと思います。

  • システムがインタラクティブモードで使用されている場合(つまり、データがREPLに入力されている場合)、処理を停止し、いくつかのアクションを提案して、ユーザーの決定を待つ必要があります。
  • バッチモードで実行されている場合(つまり、データがファイル、Webサービス、または同様のソースから取得されている場合)、この情報を破棄して処理を続行したいと思います。

もちろん、ユーザーに警告する方法もモードによって異なります。

私は、例外がこの種の問題の正しい解決策であると考えました。理由は次のとおりです。

  • 不正な形式または矛盾するデータは例外である必要があります
  • このようにして、例外的な動作のコードが通常のフローから視覚的に分離されます。
  • 例外をより高いレベルにバブルすることができ、その上でそれをどうするかを正確に決定できます。

それで私はガイドを探し始め、2つの関連するものを見つけました:

  1. @RaynosNode.jsによるこのコメントベストプラクティスの例外処理;
  2. http://codebetter.com/karlseguin/2010/01/25/don-t-use-try-catch/

前者についてはこれ以上の説明はありません。後でわかりますが、私の場合ではないと思います。

これにどのように対処しますか?私は一般的なアプローチを探していますが、必ずしもプラットフォームや言語に固有ではありません...またはJavaScriptのtry-catchに特に悪いものはありますか?

4

2 に答える 2

2

try {} catch {} finally {}は、標準ノードでの有用性が限られており、エラー処理が問題になる可能性があることは事実です。

ただし、最近行ったプロジェクトでは、次のノードモジュールを使用しました:Fibers、Fibers-Promiseは、非同期コールバックでThread.joinに似た何かを効果的に実行でき、手続き型でノードを使用できるようにします。機能的なスタイルではなく。

トレードオフがあります。ファイバー/すべてのコルーチンライブラリはノードのコアコードを変更するため、フロントエンドで使用できなくなります。ただし、目的によっては、これを調べたい場合があります。

于 2012-05-07T16:02:42.347 に答える
0

処理しているのがDATAの場合、アプリをメッセージトランスポートと考えてみてください。

このパターンでは、キャッチするものは何もありません。理解されていないデータには、有効なメッセージがユーザーに返されます。これは、データが無効であることを示すメッセージです。

そうすれば、コードを使用してデータエラーをキャッチしようとはしません。これは良いことではありません。

これを処理するために特別なライブラリは実際には必要ありません。それは何よりも思考実験です。実際には、「モデル」ハンドラー(MVCを考えてください)がうまく機能します。または、パーサー関数に渡す前に、本当に悪いデータ(たとえば、ゼロまたは過度に長いデータ)をフィルターで除外する必要があります。パーサーがデータを完全に理解できない場合、デフォルトでユーザーにエラーメッセージが返されます。

于 2012-05-15T14:40:46.493 に答える