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

L L*_*iet 5 javascript spawn child-process node.js

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

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

问题是主进程不等待子进程。

我已经编码了这样的东西

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");
}
Run Code Online (Sandbox Code Playgroud)

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

L L*_*iet 1

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

注意:在大多数情况下,您可以选择更改执行缓冲区的大小,并且这应该可以工作,因为您可以将其设置得相当大。我猜它可以达到 1 或 2 MB 左右,但我对此不确定。

如果有人有更好的主意,我会很高兴!

@Krasimir 让我知道你是如何解决这个问题的。