1. 基本的な使い方とロジック使用 試す{ //コード.... }キャッチ(エラー){ //エラー処理 }ついに{ // try/catch で何が起こっても (エラーが発生しても発生しなくても)、finally ステートメント内のこのコードは実行される必要があります。 } 論理 2. 特徴try...catch は実行時エラーに対してのみ機能し、インタープリタエラーに対しては適切に機能しません。 試す{ {{{{{{{ }キャッチ(エラー){ コンソール.エラー(err) } // エンジンは「解析時」にミスを犯し、コードを理解できず、それをキャッチできなかった。 try...catch は同期的にのみ動作します 試す{ setTimeout(関数(){ 未定義変数; },1000) }キャッチ(エラー){ コンソール.エラー(err) } //setTimeoutのコールバック関数が実行されると、エンジンはtry...catch構造を離れます 最後に、tryブロック内のreturn文を無効にすることができます。 関数テスト(){ 試す { 1 を返します。 } キャッチ(エラー) { 2を返します。 ついに 3 を返します。 } } コンソールにログ出力します。 //3 3. エラーオブジェクトプログラムでエラーが発生すると、エラーの詳細を含むオブジェクトがjs内に生成され、そのオブジェクトがcatchにパラメータとして渡されます。 すべての組み込みエラーと同様に、エラーオブジェクトには2つの主要なプロパティがあります。
試す { lalala; // エラー、変数が定義されていません。 } キャッチ (エラー) { alert(err.name); // 参照エラー alert(err.message); // lalala は定義されていません alert(err.stack); // ReferenceError: lalala は (...call stack) で定義されていません // エラー全体を表示することもできます // エラーは「name: message」という文字列に変換されます alert(err); // ReferenceError: lalala は定義されていません } 理論的には、何でもエラー オブジェクトとしてスローできますが、組み込みのエラー オブジェクトとの互換性を保つために、名前とメッセージを持つオブジェクトをスローするのがベスト プラクティスです。 追加: 組み込みエラーオブジェクト
4. キャッチアンドスロー戦略の改善エラーをキャッチするのは、プログラムのクラッシュを防ぐためだけではなく、デバッグを容易にし、バグを見つけるためにも重要です。そのため、エラー処理戦略は、コーディング者の優雅さを少し反映することができます。 諺にあるように、コーダーは常にエレガントです。知っているエラーだけをキャッチするという原則に従うようにしてください。 梨を持ち上げて json = '{ "age": 30 }'; 試す{ user = JSON.parse(json); とします。 アラート(ユーザー名); } キャッチ (エラー) { console.error('JSON エラー:'+err); } 上記の例の catch 戦略は、プログラムの正常な動作を保証できます。これは、catch ブロックが内部のすべてのエラーをキャッチできるためです。JSON.parse のエラーでも、user.name が存在しないエラーでも、どちらもキャッチできます。ただし、両方のエラーを同じように印刷することは、デバッグには役立ちません。次のように記述する方がよいでしょう。 json = '{"age":30}' とします 試す{ user = JSON.parse(json); とします。 アラート(ユーザー名) }キャッチ(エラー){ if (err instanceof SyntaxError) { console.error('JSON エラー:'+err); } それ以外の場合はエラーをスローします。 } 各 catch ブロックは、発生する可能性があるとわかっているエラーを処理します。つまり、プログラミング時に、プログラマーは予想されるエラーをキャッチし、予想していなかったエラーを破棄します。 5. Promiseのエラー処理ご存知のとおり、Promise はエラーを吸収します。これは、Promise の実装がすべてのエラーを内部でキャプチャし、キャプチャされたエラーが外部 (Promise の外部) にスローされず、チェーンに沿って最も近い onreject コールバックを見つけることによって渡されるためです。そのため、Promise エラーを処理する方法は 2 つしかありません。
例えば 試す{ 新しいPromise((resolve,reject)=>{ 新しいエラーをスローします('promise error') }).catch(()=>{ // エラーは最新の onreject コールバックでキャッチされます console.error(err); }) }キャッチ(エラー){ // 実行されず、Promise はエラーを飲み込む コンソールエラー(err); } また、executor 関数または promise ハンドラーに関係なく、内部で発生するすべてのエラーは取り込まれ、暗黙的にキャッチされることと同等であることに注意してください。エラーは自動的に最も近い onreject コールバックを見つけて渡します。 試す{ 新しいPromise((resolve,reject)=>{ 解決する(); })。そして()=>{ 新しい Error をスローします ('promise then error')。 }).catch((エラー){ コンソールエラー(err); }) }キャッチ(エラー){ //console.error(err) は地球が破壊されるまで実行されません } 同様に、エラーが見つかりonrejectに渡される前は、onrejectコールバックが見つかり処理されるまで、それまでに登録されたonfulfilledコールバックはすべて無効です。onrejectコールバック後のonfulfilledコールバックは正常です。 試す { 新しい Promise((resolve, 拒否) => { 新しいエラーをスローします('promise error') }).then((ret) => { //エラーは処理されず、失敗します console.log('then1:' + ret) }).catch((エラー) => { //エラーが処理され、後続のシーケンスは通常どおりです console.error(err); '処理済み' を返す }).then((ret) => { //通常実行 console.log('then2' + ret); }) } キャッチ (エラー) { //同様に、人類が滅亡するまでconsole.error(err)は実行されません } // エラー: プロミスエラー //その後処理される チェーン全体にキャッチが設定されていない場合はどうなりますか? そして、このエラーは地球の中心を貫通してグローバル環境まで浸透し、異なるホスト環境に応じて異なるグローバルイベントをトリガーします。たとえば、ブラウザでは unhandledrejection イベントがトリガーされ、ノード環境でも unhandledRejection イベントがトリガーされます。通常、このイベントは監視され、その後、プログラマーまたはユーザーに情報が表示されます。 追加 1: Chromium / v8 / v8 / 3.29.45 の Promise 内部エラー キャプチャ 追加2: async/await エラーキャプチャ 6. パフォーマンスの低下V8 バージョン 6 (Node 8.3 および最新の Chrome に同梱) 以降では、try-catch 内のコードのパフォーマンスは通常のコードと同じです。 ------ 爆栈網 (少しテストしてみましたが、違いはあまりありませんでした) 以上がJavaScriptエラーキャプチャの詳しい説明です。JavaScriptエラーキャプチャの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください。 以下もご興味があるかもしれません:
|
<<: Oracle と MySQL の高可用性ソリューションの比較分析
この記事で使用されているPHPベースイメージはphp:7.3-apacheです。この記事の Lara...
この記事では、参考までにMySQLの無料インストール構成チュートリアルを紹介します。具体的な内容は次...
元のアドレス: https://blog.csdn.net/m0_46579864/article/...
背景: 開発プロセスでは、現在の月、現在の日、現在の時間、今後数日など、時間を判断条件としてデータを...
最適化のアイデア最適化には主に 2 つの方向があります。再レンダリングの回数を減らします。 Reac...
iPadなどのモバイル端末の普及により、人々がモバイル端末で読書に費やす時間はますます長くなり、読...
今日、小さなプログラムを書いていたときに、スクロールビューを使用したのですが、スクロールビュー内のテ...
nginx を導入した際に、フォワードプロキシの設定も nginx を使っていました。しかし、htt...
圧縮版の記事ではデータの初期化がされていないなどいくつか問題があったため、Windows にインスト...
目次クラスコンポーネントイベントバインディング関数コンポーネントイベントバインディング要約するRea...
MySQL データベースは、特に JAVA プログラマーの間で広く使用されています。クラウド データ...
データベース インデックスは、テーブル操作の速度を向上させることを目的としたデータ構造です。高速なラ...
以下のように表示されます。 table1 を z として更新し、table2 を zb として結合し...
1. バックアップスクリプトを書く 著者:www.yumi-info.com 日付:20171222...
目次1. インストール2. カプセル化に問題はない3. ファイルを作成する4. アドレス設定をリクエ...