2013-11-01 20 views
6

Wenn ich in Node.js eine Methode habe, die eine Ausnahme auslöst, werden console.log-Anweisungen von dieser Methode nicht ausgelöst. Ich erkenne, dass ich im folgenden einfachen Testfall die Ausnahme vom Aufruf von readFileSync abfangen oder anderweitig in der Defensive sein sollte. Ich bin nur neugierig, ob mir jemand das Verhalten erklären könnte.Node.js: console.log Nachricht wird nicht angezeigt, wenn die Methode eine Ausnahme auslöst ... warum?

Einfache Testfall:

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"); 

Ausgang:

$ 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

Es funktioniert wie erwartet für mich (Node 0.10.10) – JJJ

+0

Funktioniert auch für mich (v0.10.21). – matth

+0

Ja, habe nicht bemerkt, wie weit zurück mein Knoten war ... danke. – Shaun

Antwort

18

Ah, es herausgefunden.

Es scheint, dass console.log nicht beendet wird, bevor der Prozess beendet wird ... Wenn ich console.warn verwende, wird die Nachricht angezeigt.

Dieser Beitrag erklärt es: is node.js' console.log asynchronous?

Auch ich bin auf einer älteren Version (0.8.15), so dass diese nicht mehr relevant sein können.