2016-06-22 18 views
2

私はPHPからNodeJSに移行しています。 1つのクエリは、私があまりにも多くいると思うのコードの行を7+等しい私のコーディングスタイルで非同期NodeJSアプリケーションでエラーを処理する方法

db.execute("SQL query", [params], (err, rows) => { 
    if(err) { 
     console.log("error happened"); 
    } 
    else { 
     db.execute("other query", [params], (err, rows) => { 
      if(err) { 
       console.log("another error happened"); 
      } 
      else { 
       console.log("success"); 
      } 
     }); 
    } 
}); 

:たとえば、私は、コードをより雑然となり、実行してMySQLと(イベント非同期)以上のクエリを使用しています。 あなたはこの種のコードをどのように扱いますか?皆さんは、何らかのグローバルな「エラー時に」イベントを使用します。これは、クエリのいずれかが失敗したときに起動し、この時点までにすべてが機能していると仮定しただけです。私は次のようなことを考えていました。

function onError() { 
    console.log("an error happened"); 
} 

db.execute("SQL query", [params], (onError, rows) => { 
    db.execute("other query", [params], (onError, rows) => { 
     console.log("success"); 
    }); 
}); 
+0

複雑なエラー伝播を行うため、約束事はエラー処理に大いに役立ちます。通常、1つのグローバルエラーハンドラは存在しません。なぜなら、すべてのエラー状態は、処理方法が異なる可能性があるからです。良いエラー処理のためのショートカットはありません。すべての操作で発生するすべてのタイプのエラーを評価し、それぞれのエラーの処理方法を決定する必要があります。エラーが発生した場合や、ファイルやデータベースを閉じるなど、クリーンアップが必要なものがある場合は、操作を中止することができますか? – jfriend00

+0

私の問題は、ほとんどの場合、エラーの修正がないことです。クライアントは「やり直す」必要があり、リクエストは無視する必要があります。この場合、エラーは、不明なmysqlエラーがあった場合にのみ発生します。私は "SELECT 1"が失敗するエラーを修正する方法を知らない。 –

+0

これは問題ではありません。それはエラーがあった場合に何をすべきかを分析したものです。すべてのエラー・パスがまったく同じ結論を持ち、実行するクリーンアップや呼び出し元に通信するための追加情報がない場合は、共通のエラー処理関数を使用できます。しかし、エラーが発生する可能性のあるすべての種類のエラーを分析し、実行するコードがまったく同じである必要があると判断した場合にのみ実行してください。 – jfriend00

答えて

3

プロミス(答えは、ES6の約束か、ブルーバードのパッケージを見てください)が答えです。あなたはそれらを次々に連鎖させ、私が愛していることの1つを連想させます - もはや "if(エラー)"。エラーをキャッチするCatchメソッドを定義します。また、1つのキャッチで問合せ全体が十分です。

関連する問題