3

これはしばらくの間私を悩ませました。私はアサーションの失敗時に例外をスローしますが、これは実際に例外をキャッチできる場合にのみ役立ちます (この場合、私alertはユーザーです)。例外をキャッチできない場合は、

  1. 内部エラーが発生したことをユーザーに通知するためにブラウザーに依存しています (ブラウザーは何もしない可能性があるため、ユーザーは問題があることに気付かない可能性があります)。
  2. 覗いてないから片付けられない。

では、実際に JavaScript でアサーション エラーを処理する良い方法はありますか? キャッチされていない例外をキャッチする方法はありますか? 単体テストやユーザー エラーなどには関心がないことに注意してください。ユーザーと開発者の両方がエラーが発生したことを知る必要があるコントラクト プログラミングだけに関心があります。

4

1 に答える 1

2

アサーションには、 がありconsole.assert()ます。ただし、それはメッセージをログに記録して続行するだけです。

window.onerrorHTML5 では、ハンドラーを使用して未処理の例外をキャッチすることもできます。dev.opera に関する優れた記事があります。これを使用して、ファンシーなエラー メッセージをユーザーに表示したり、サーバーに例外をログに記録したりできます。

それを使用できない場合は、try-catch-clauses をすべて (特に、イベント ハンドラー、タイムアウトなどの「実行エントリ ポイント」) にラップする必要があります。または、エラーをスローする前にエラーを処理できます。

function SmartError(message) {
    Error.call(this, message);
    $('<div class="error">Some problem occured, the app will stop working</div>')
        .appendTo("body");
    $.post("/log/clientside/js.php", this);
    ...
}

if (something.does(! "work"))
    throw new SmartError("mysterious problem");
于 2012-06-06T17:34:41.093 に答える