Nodejs如何等待子进程退出或允许它响应

时间:2014-02-23 16:24:24

标签: javascript node.js spawn child-process

我的nodejs应用程序在接收特定请求时使用spawn生成子进程(我不能使用exec作为输出很大,并且不知道我是否可以添加回调到生成的进程)来准备响应。 / p>

我希望子进程发送响应或主进程等待孩子准备响应并退出。

问题是主要过程不等孩子。

我编写了类似这样的内容

inputQuery: function(req, res){
                 var output="";
                 var query = "printjson(db.getCollectionNames())";

                 var temp  = spawn("mongo", ["mongoweb ", "-eval", query]);
                 temp.on('error', function (err){
                         console.log(err);
                 });
                 temp.stdout.on('data', function(data){
                         output += data;
                 });

                 temp.stderr.on('data', function(data){
                         console.log(data);
                 });

                 temp.on("exit", function(code){
                         console.log("Output is :" + output);
                         res.send(output); // Either send response here or after the log message below

                 });

                 console.log("I want this to wait or let child respond");
}

我真的被困住了,不知道怎么做。请帮忙。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我最终做的是生成一个将结果捕获到临时文件中的进程。然后在孩子完成时将消息传递给父母(基本上是一个标志)。等待此消息并在获取消息时,启动另一个进程以重复复制缓冲区并继续将stdout转储到循环中直到完成。

注意:对于大多数情况,您可以选择更改exec缓冲区的大小,这应该可以正常工作,因为它可以使它非常大。我想它可以达到1或2 MB之类的东西,但是我不确定。

很高兴有人有更好的主意!!!

@Krasimir让我知道你是如何解决它的。