如何与节点同步执行node.js文件?

时间:2012-12-06 15:51:11

标签: javascript node.js asynchronous

  

可能重复:
  node.js execute system command synchronously

我希望从另一个node.js文件同步执行node.js文件。这是我的,但它的异步。

    var spawn = spawn('node', ['./file.js']);
    spawn.stdout.on('data',function(data){});

1 个答案:

答案 0 :(得分:2)

根据您在问题中的评论,听起来您不希望希望它是同步的,并且您不关心它的输出。

如果您只是想解雇其他进程并忘记,无需关注或关注何时结束,您已经使用的内容(spawn)就是这样做的。

如果您希望真正发射,那么您需要指定detached选项,以便在您的进程终止时不会终止子进程。来自文档:

  

如果设置了detached选项,子进程将成为新进程组的领导者。这使得孩子可以在父退出后继续运行。

进一步向下看,显然你也必须unref

  

默认情况下,父级将等待已分离的子级退出。要防止父级等待给定的子级,请使用child.unref()方法,父级的事件循环不会将子级包含在其引用计数中。

显然处理stdio

  

使用detached选项启动长时间运行的进程时,除非提供的stdio配置未连接到父进程,否则该进程不会在后台继续运行。如果继承了父级的stdio,则子级将保持连接到控制终端。

所以:

spawn('node', ['./file.js'], {
    detached: true,
    stdio: [ 'ignore', 'ignore', 'ignore' ]
}).unref();