2013-07-10 15 views
10

mam jakiś kod runiczny w procesie dziecięcej w programie węzła tak:Czy blok try-catch-finally jest synchroniczny w pliku 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"); 

Kod ten jest wywoływany z innego programu węzła, który musi czekać, aż wszystkie operacje w tym pliku są wykonywane. Niestety proces potomny wychodzi z kodem 0, zanim zostanie wykonany dowolny kod pod blokiem finally.

To prowadzi mnie do przekonania, że ​​nawet try-catch-finally jest asynchroniczny. Czy to jest poprawne?

+0

To naprawdę nie ma sensu. –

+0

Może powinienem otworzyć nowe pytanie, właśnie dodałem kilka instrukcji logowania w innym miejscu i wygląda na to, że proces potomny wychodzi, nawet go nie uruchamiając. – krb686

+0

@MattBall proszę odnieść się do tego pytania: http://stackoverflow.com/questions/17572834/child-process-in-node-js-mysteriously-exiting-between-lines-ofsynchronous-code – krb686

Odpowiedz

16

Twoje pytanie jest myląco sformułowane.

Cały kod JavaScript jest w pełni synchroniczny; wszystkie konstrukcje językowe, w tym bloki catch i finally, zostaną wykonane synchronicznie przed uruchomieniem następnego wiersza kodu.

Jednak nie są one świadome żadnych operacji asynchronicznych, które mogły się rozpocząć, i nie będą czekać na ich zakończenie.

+0

Proszę odnieść się do tego pytania : http://stackoverflow.com/questions/17572834/child-process-in-node-js-mysteriously-exiting-between-lines-synchronous-code – krb686

Powiązane problemy