下列内容按预期工作,等待3秒钟后退出:
child_process.spawn( 'sleep', [3] );
但这会立即退出,而不是等待3秒钟(和直接运行此命令时一样):
child_process.spawn( 'node', ['-e', '"setTimeout(null, 3000);"'] );
有什么想法吗?谢谢。
编辑:
spawnSync()
在两种情况下的行为相同。另外,我不希望spawn()
函数阻塞,我希望节点进程在退出自身之前先等待其子级退出。 最佳答案
问题是双引号。这使您的程序执行只是一个字符串,而不是setTimeout()
函数调用。使用此代替:
child_process.spawn( 'node', ['-e', 'setTimeout(null, 3000);'] );
请注意删除
setTimeout()
周围的双引号。用双引号引起来,它实际上与从命令行运行它相同(假设是类似Unix的操作系统/ shell):
'node' '-e' '"setTimeout(null, 3000);"'
尝试一下,您会看到它立即返回,因为最后一个参数只是一个字符串值,不需要解析和执行。然后试试这个:
'node' '-e' 'setTimeout(null, 3000);'
这将等待您期望的三秒钟。
关于javascript - child_process.spawn()不等待子 Node 进程完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33590343/