2013-11-01 12 views
6

In Node.js, se ho un metodo che genera un'eccezione, le istruzioni di console.log da quel metodo non vengono attivate. Riconosco che nel semplice caso di test qui sotto dovrei prendere l'eccezione dalla chiamata readFileSync, o comunque essere difensivo a riguardo. Solo curioso se qualcuno potesse spiegarmi il comportamento.Node.js: il messaggio console.log non viene visualizzato se il metodo genera un'eccezione ... perché?

Semplice test case:

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

uscita:

$ 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

Funziona come previsto per me (Nodo 0.10.10) – JJJ

+0

Funziona anche per me (v0.10.21). – matth

+0

Sì, non mi rendevo conto di quanto fosse indietro il mio nodo ... grazie. – Shaun

risposta

18

Ah, capito.

Sembra che console.log non stia terminando prima che il processo esca ... Se utilizzo console.warn, il messaggio appare.

Questo post spiega: is node.js' console.log asynchronous?

Inoltre, io sono su una versione precedente (0.8.15), quindi questo potrebbe non essere più rilevante.

Problemi correlati