2015-11-08 95 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);' 

这将等待三秒钟,如你所期望的。