2013-11-01 3 views
6

В Node.js, если у меня есть метод, который генерирует исключение, инструкции console.log из этого метода не срабатывают. Я признаю, что в простом тестовом примере ниже я должен поймать исключение из вызова readFileSync или иначе защищаться. Просто любопытно, сможет ли кто-нибудь объяснить мне поведение.Node.js: Сообщение 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, сообщение появляется.

Это сообщение объясняет: is node.js' console.log asynchronous?

Кроме того, я на старой версии (0.8.15), так что это не может не быть актуальным.

Смежные вопросы