2015-11-08 90 views
1

下按預期工作,等待3秒退出前:child_process.spawn()不等待子節點處理完成

child_process.spawn('sleep', [3]); 

但這是立即退出,而不是等待3秒它應該(和它當這個命令直接運行:

child_process.spawn('node', ['-e', '"setTimeout(null, 3000);"']); 

任何想法,爲什麼感謝

編輯:。 01在這兩種情況下,的行爲方式都是相同的。另外,我並不期待spawn()函數被阻塞,我期待節點進程在退出之前等待其子進程退出。

回答

1

問題是雙引號。這使得你的程序只是一個字符串而不是一個setTimeout()函數調用。改爲:

child_process.spawn('node', ['-e', 'setTimeout(null, 3000);']); 

請注意刪除setTimeout()左右的雙引號。

隨着雙引號,這是有效地一樣在命令行中運行(假設類似Unix的操作系統/殼):

'node' '-e' '"setTimeout(null, 3000);"' 

嘗試它,你會看到它返回正確的因爲最後一個參數只是一個不需要解析和執行的字符串值。然後試試這個:

'node' '-e' 'setTimeout(null, 3000);' 

這將等待三秒鐘,如你所期望的。