English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Node.jsのTry Catch これはエラーハンドリングのメカニズムです。特定の一段のコードがエラーを投げ出すことを期待して、try文で囲まれた場合、catchブロックでそのコード部分で発生した全ての例外を解決することができます。エラーが何らかの方法で処理されない場合、プログラムは突然終了し、これは良いことではありません。
注意:以下は最善の方法です。Node.jsのTry Catch同期操作のみに使用されます。また、このチュートリアルでは、Try Catch非同期操作に使用されます。
Node.jsで試行錯誤を行う例
なぜNode.jsのTry Catchを使用して非同期操作のエラーをキャッチしないのか
非同期コードの例外はどうなるのでしょうか?
このサンプルでは、以下に試みる同期ファイル読み取りのコード部分に使用されていますTry Catch。
#example for Node.js Try Catch var fs = require('fs'); try{ // ファイルが存在しません var data = fs.readFileSync('sample.html'); } catch (err) { console.log("Catchブロック内") console.log(err); console.log("Continuing with other statements...");
上記のプログラムを実行すると...
console.log("次のステートメント")
ターミナル出力-arjun@arjun26VPCEH/nodejs$ node nodejs-nodejs-try-example.js { Error: ENOENT: no such file or directory, open 'sample.html' at Object.fs.openSync (fs.js:652:18) at Object.fs.readFileSync (fs.js:553:33) at Object.<anonymous> (/arjun/arjun-nodejs-try-example.js:5:16) at Module._compile (module.js:573:30) at Object.Module._extensions..js (module.js:584:10) at Module.load (module.js:507:32) at tryModuleLoad (module.js:470:12) at Function.Module._load (module.js:462:3) at Function.Module.runMain (module.js:609:10) at startup (bootstrap_node.js:158:16) errno: -2, code: 'ENOENT', syscall: 'open', path: 'sample.html'} Continuing with other statements..
プログラムは突然終了するのではなく、その後のステートメントを実行し続けます。
今や、上記の同じ操作にtry catchを使用しない場合に何が起こるかを見てみましょう。
# error without Node.js Try Catch var fs = require('fs'); // ファイルを同期で読み込むことを試み、presenetファイルを代わりに使用するのではなく var data = fs.readFileSync('sample.html'); console.log("Continuing with other statements...");
コードにはエラーハンドリングメカニズムがなく、プログラムは突然終了し、その後のステートメントは実行されません。
上記のプログラムを実行すると...
console.log("次のステートメント")
ターミナル出力-arjun@arjun26VPCEH/nodejs$ node nodejs-nodejs-try-catch-1catch$ node nodejs /次のステートメント/home/arjun/arjun-nodejs-try-catch-1example1 (function (exports, require, module, __filename, __dirname) { # example for Node.js Try Catch if(err) throw err; SyntaxError: Invalid or unexpected token at createScript (vm.js:74:10) at Object.runInThisContext (vm.js:116:10) at Module._compile (module.js:537:28) at Object.Module._extensions..js (module.js:584:10) at Module.load (module.js:507:32) at tryModuleLoad (module.js:470:12) at Function.Module._load (module.js:462:3) at Function.Module.runMain (module.js:609:10) at startup (bootstrap_node.js:158:16) at bootstrap_node.js:598:3
以下の例を考えてみましょう。その例では、ファイルを読み込むためのコールバック関数を使用して非同期にファイルを読み取り、問題が発生した場合にエラーをスローします。その後、タスクを「試行捕獲」ブロックで囲み、スローされたエラーをキャッチしようとします。
# Node.jsの非同期コールバック関数でのTry Catch var fs = require('fs'); try{ fs.readFile('sample.txta', // コールバック関数 function(err, data) { .js: }); catch(err){ } console.log("Catchブロック内") console.log(err); }
console.log("次のステートメント")
ターミナル出力-arjun@arjun26VPCEH/arjun/nodejs-EN:~-nodejs-try-catch-2catch$ node nodejs .js /次のステートメント/home/arjun/nodejs-try/arjun-nodejs-try-catch-2example8 .js: if(err) throw err; ^
Error: ENOENT: ファイルまたはディレクトリが見つかりません、'sample.txta'をオープン出力が観察された場合は、コントロール台。if(err) throw err前に実行log("次のステートメント") これは、ファイルの読み取りが非同期に完了し、コントロールがファイル操作の完了を待たずに次のステートメントを実行し続けるためです。これは、コントロールがtry catchブロック内にいないことを意味します。非同期操作中にエラーが発生した場合、コントロールはtry catchブロックの何も知りません。したがって、私たちのTry Catchブロックは非同期操作中に発生する可能性のあるエラーをキャッチできず、開発者はそれを使用を避けるべきです。Node.jsのTry Catchブロックキャッチ非同期タスクによって引き起こされるエラー。
非同期コードの例外が何になるか分からない場合は、これが答えです。Callback関数を通じてエラーオブジェクトが引数として観察され、すべてのエラーまたは例外がここでNode.jsに報告される場合があります。
このNode.jsのチュートリアルでは、 Node.jsのTry Catchで、Try Catchの使用方法とTry Catchを使用しないシーンについて学びました。