2013-07-10 68 views
10

我有一些代碼在子進程乳寧在一個節點的程序,像這樣:是否在node.js中同步try-catch-finally塊?

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

此代碼是從另一個節點的程序,需要等到這個文件中的所有操作都做了所謂的。不幸的是,在執行finally塊之下的任何代碼之前,子進程正在以代碼0退出。

這讓我相信,即使try-catch-finally是異步的。那是對的嗎?

+0

這確實就沒有意義見。 –

+0

也許我應該開一個新的問題,我在其他地方添加了一些日誌語句,看起來子進程正在退出,甚至沒有運行它們。 – krb686

+0

@MattBall請參考此問題:http://stackoverflow.com/questions/17572834/child-process-in-node-js-mysteriously-exiting-between-lines-of-synchronous-code – krb686

回答

16

你的問題是措辭混亂。

整個Javascript 語言是完全同步的;所有語言結構,包括catchfinally塊,將在運行下一行代碼之前同步執行。

但是,他們沒有意識到任何可能已經開始的異步操作,並且不會等待它們完成。

+0

請參考此問題:http://stackoverflow.com/questions/17572834/child-process-in-node-js-mysteriously-exiting-between-lines-of-synchronous-code – krb686