web-dev-qa-db-ja.com

Node.js:メソッドが例外をスローした場合にconsole.logメッセージが表示されない...なぜですか?

Node.jsで、例外をスローするメソッドがある場合、そのメソッドからのconsole.logステートメントは起動しません。以下の簡単なテストケースでは、readFileSync呼び出しからの例外をキャッチするか、それ以外の場合は防御する必要があることを認識しています。誰かが私に行動を説明できるかどうかだけ興味があります。

簡単なテストケース:

var fs = require('fs');

function readAFileThatDoesntExist(filename) {
    console.log(filename);
    fs.readFileSync(filename);
}

console.log("We're about to read a file that doesn't exist!");
readAFileThatDoesntExist("afile");

出力:

$ node test.js
We're about to read a file that doesn't exist!

fs.js:338
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT, no such file or directory 'C:\blog\projects\bloggen\scripts\afile'
    at Object.fs.openSync (fs.js:338:18)
    at Object.fs.readFileSync (fs.js:182:15)
    at readAFileThatDoesntExist (C:\blog\projects\bloggen\scripts\test.js:5:8)
    at Object.<anonymous> (C:\blog\projects\bloggen\scripts\test.js:9:1)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)
7
Shaun

ああ、それを理解した。

プロセスが終了する前にconsole.logが終了していないようです... console.warnを使用すると、メッセージが表示されます。

この投稿はそれを説明しています: node.jsのconsole.logは非同期ですか?

また、私は古いバージョン(0.8.15)を使用しているため、これはもはや関係がない可能性があります。

21
Shaun