2013-07-10 9 views
10

Ich habe einige Code wie so in einem Kind Prozess in einem Knoten Programm runing:Ist der try-catch-finally-Block synchron in node.js?

try{ 
    var data = fs.readFileSync(urlPath, {"encoding":"utf8"}); 
} catch (err) { 
    console.log("Error reading url file..."); 
    throw err; 
} finally { 
    console.log("File read!"); 
    var array = data.split("\n"); 

    console.log("Found " + array.length + " urls"); 

Dieser Code von einem anderen Knoten Programm aufgerufen wird, die bis alle Operationen in dieser Datei warten muss getan werden. Leider wird der untergeordnete Prozess mit Code 0 beendet, bevor der Code unter dem finally-Block ausgeführt wird.

Dies führt mich zu der Annahme, dass auch die try-catch-finally asynchron ist. Ist das korrekt?

+0

sehen, dass wirklich keinen Sinn machen würde. –

+0

Vielleicht sollte ich eine neue Frage öffnen, ich habe gerade einige Logging-Anweisungen an anderer Stelle hinzugefügt und es scheint, dass der Child-Prozess beendet wird, ohne diese sogar auszuführen. – krb686

+0

@MattBall beziehen Sie bitte sich auf diese Frage: http://stackoverflow.com/questions/17572834/child-process-in-node-js-mysteriously-exiting-between-lines-of-synchronous-code – krb686

Antwort

16

Ihre Frage ist verwirrend formuliert.

Das gesamte Javascript Sprache ist voll synchron; Alle Sprachkonstrukte, einschließlich catch und finally Blöcke, werden synchron ausgeführt, bevor die nächste Codezeile ausgeführt wird.

Sie haben jedoch keine Kenntnis von möglicherweise begonnenen asynchronen Vorgängen und warten nicht, bis sie beendet sind.

+0

Bitte beziehen Sie sich auf diese Frage : http://stackoverflow.com/questions/17572834/child-process-in-node-js-mysteriously- exiting-between-lines-of-synchronous-code – krb686