以下按预期工作,在退出前等待3秒:
child_process.spawn( 'sleep', [3] );
但是它会立即退出,而不是等待3秒(和直接运行此命令时一样):
child_process.spawn( 'node', ['-e', '"setTimeout(null, 3000);"'] );
为什么有任何想法?感谢。
编辑: spawnSync()
在两种情况下都表现相同。另外,我不希望阻止spawn()
函数,我希望节点进程在退出之前等待其子进程退出。
答案 0 :(得分:1)
问题是双引号。这使得程序执行只是一个字符串而不是setTimeout()
函数调用。请改用:
child_process.spawn( 'node', ['-e', 'setTimeout(null, 3000);'] );
请注意删除setTimeout()
附近的双引号。
使用双引号,它实际上与从命令行运行它(假设类Unix操作系统/ shell)相同:
'node' '-e' '"setTimeout(null, 3000);"'
尝试它,你会看到它立即返回,因为最后一个参数只是一个不需要解析和执行的字符串值。然后试试这个:
'node' '-e' 'setTimeout(null, 3000);'
那会像你期待的那样等待三秒钟。