2013-07-10 4 views
10

Ho qualche codice di matricola in un processo bambino in un programma di nodo in questo modo:Il blocco try-catch-finally sincrono 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"); 

Questo codice viene chiamato da un altro programma di nodo, che ha bisogno di attendere che tutte le operazioni in questo file sono fatto. Sfortunatamente, il processo figlio sta terminando con il codice 0 prima che venga eseguito qualsiasi codice sotto il blocco finally.

Questo mi porta a credere che anche lo try-catch-finally sia asincrono. È corretto?

+0

che in realtà non avrebbe senso. –

+0

Forse dovrei aprire una nuova domanda, ho appena aggiunto alcune dichiarazioni di registrazione altrove e sembra che il processo figlio stia uscendo senza nemmeno averle eseguite. – krb686

+0

@MattBall fai riferimento a questa domanda: http://stackoverflow.com/questions/17572834/child-process-in-node-js-mysteriously-exiting-between-lines-of-synchronous-code – krb686

risposta

16

La tua domanda è formulata in modo confuso.

L'intera lingua Javascript è completamente sincrona; tutti i costrutti linguistici, compresi i blocchi catch e finally, verranno eseguiti in modo sincrono prima di eseguire la riga di codice successiva.

Tuttavia, non sono a conoscenza di operazioni asincrone che potrebbero essere iniziate e non aspetteranno che finiscano.

+0

Fai riferimento a questa domanda : http://stackoverflow.com/questions/17572834/child-process-in-node-js-mysteriously-exiting-between-lines-of-synchronous-code – krb686