2017-10-30 3 views
4

REST API呼び出しを処理するこの関数では、要求の一部を処理する呼び出された関数のいずれかが、エラーコードを応答として送信する必要があることを通知するエラーをスローする可能性があります。しかし、関数自体もエラーを発見する可能性があり、その時点で例外処理ブロックにジャンプする必要があります。 Webstormは、次のメッセージでthrowを強調します"ローカルで捕捉された例外の"スロー "を修正するには?

static async handleRequest(req) { 
    try { 
     let isAllowed = await checkIfIsAllowed(req); 
     if (!isAllowed) { 
      throw new ForbiddenException("You're not allowed to do that."); 
     } 
     let result = await doSomething(req); // can also raise exceptions 
     sendResult(result); 
    } catch(err) { 
     sendErrorCode(err); 
    } 
} 

'throw' of exception caught locally. This inspection reports any instances of JavaScript throw statements whose exceptions are always caught by containing try statements. Using throw statements as a "goto" to change the local flow of control is likely to be confusing.

しかし、私は状況を改善するためのコードをリファクタリングするかどうかはわかりません。

私はifチェックにcatchブロックからコードをコピー - ペーストができ、私はこれは私のコードが読みにくく、維持が困難になるだろうと信じています。

isAllowedチェックを行い、成功しない場合は例外をスローする新しい機能を書くことができますが、Webstormが報告している設計上の問題を修正するのではなく、問題を回避しているようです。

私たちは悪い方法で例外を使用しているので、この問題が発生しているのですか、Webstormのエラーが間違っていて無効にする必要がありますか?

答えて

6

isAllowedが失敗した場合、何かを確認して例外をスローしますが、その状況で何をすべきかを知っていれば、sendErrorCodeに電話してください。状況を処理する方法がわからない場合(例外的な状況で)、外部発信者に例外を送信する必要があります。

static async handleRequest(req) { 
    try { 
     let isAllowed = await checkIfIsAllowed(req); 
     if (!isAllowed) { 
      sendErrorCode("You're not allowed to do that."); 
      return; 
     } 
     let result = await doSomething(req); // can also raise exceptions 
     sendResult(result); 
    } catch(err) { 
     sendErrorCode(err); 
    } 
} 

私はcatchブロックからコードをコピー - ペーストできます。ただ間接的なスロー/キャッチせずに直接それを使用する - この問題が発生した場合は、すでに何をすべきかの定義されたプロセスを持っている。この場合

ifのチェックに入りますが、これは私のコードを読みにくく維持するのが難しくなると思います。

これとは逆に、私はこれがこのような状況に対処する方法であると考えています。

+1

"状況を処理する方法がわからない場合、つまり例外的な状況では、外部発信者に例外を送信する必要があります。それが本当であれば、それは問題を説明します。ただし、これは、この機能だけでなく、プロジェクト全体で例外を使用していることを意味します。他の答えはないので、私はこれを受け入れます。 – cib

-1

これはあなたにいくつかのヒントを与えるかもしれませんが、多分それが原因である可能性があります。 Catch statement does not catch thrown error

「あなたのtry catchブロックが失敗する理由 理由はAJAXリクエストが非同期であるため、トライcatchブロックは、Ajax呼び出しの前に実行し、要求自​​体を送信します。ですが、結果があるときにエラーがスローされます返される、遅い時点で

エラーがスローされるとtry catchはありません.Ajaxリクエストを捕まえる必要がある場合は、常にajaxを入れます成功のコールバック内でブロックをキャッチしてください。決してその外にはいけません。 "

関連する問題