Node.js:console.log消息不显示,如果方法抛出exception…为什么?

在Node.js中,如果我有引发exception的方法,那么来自该方法的console.log语句不会触发。 我认识到,在下面这个简单的testing案例中,我应该从readFileSync调用中捕获exception,否则就会防御它。 只是好奇,如果有人可以解释我的行为。

简单的testing案例:

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) 

啊,算出来。

看来,console.log没有完成之前,进程退出…如果我使用console.warn,消息显示。

这篇文章解释说: 是node.js的console.logasynchronous?

此外,我在一个较旧的版本(0.8.15),所以这可能不再相关。