2013-11-01 4 views
6

Node.js에서 예외를 throw하는 메서드가 있으면 해당 메서드의 console.log 문이 실행되지 않습니다. 나는 아래의 간단한 테스트 케이스에서 readFileSync 호출로부터 예외를 잡아야한다는 것을 알고있다. 그렇지 않으면 그것에 대한 방어가되어야한다. 누군가가 저에게 행동을 설명 할 수 있는지 궁금합니다.Node.js : 메서드가 예외를 throw하면 console.log 메시지가 표시되지 않습니다 ... 왜?

간단한 테스트 케이스 :

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) 
+0

예상대로 작동합니다 (노드 0.10.10) – JJJ

+0

잘 작동합니다 (v0.10.21). – matth

+0

그래, 내 노드가 얼마나 멀리 뒤로 ... 깨닫지 못 했어. 고마워. – Shaun

답변

18

아, 그것을 알아 냈다.

프로세스가 끝나기 전에 console.log가 완료되지 않은 것 같습니다 ... console.warn을 사용하면 메시지가 표시됩니다. 나는 이전 버전 (0.8.15)에있어, 또한 is node.js' console.log asynchronous?

를, 그래서 이것은 더 이상 관련이 없을 수 있습니다

이 게시물을 설명합니다.