Javascript 子进程生成返回NaN
我试图理解node.js中的子流程模块,我创建了一个父文件,其中包含以下代码:Javascript 子进程生成返回NaN,javascript,node.js,Javascript,Node.js,我试图理解node.js中的子流程模块,我创建了一个父文件,其中包含以下代码: var spawn=require("child_process").spawn; var child=spawn("node",['plus_one.js']); setInterval(function(){ //var number=Math.floor(Math.random()*10000); var number=10; child.stdin.write(number + "\n
var spawn=require("child_process").spawn;
var child=spawn("node",['plus_one.js']);
setInterval(function(){
//var number=Math.floor(Math.random()*10000);
var number=10;
child.stdin.write(number + "\n");
child.stdout.once("data",function(data){
console.log("Child replied to "+number + " with " + data);
})
},1000);
child.stderr.on("data",function(data){
//process.stdout.write(data);
console.log("error"+data)
})
子文件如下所示:
process.stdin.resume();
process.stdin.on("data",function(data){
var number;
try{
number = parseInt(data.toString(), 10);
number+=1;
process.stdout.write(number+"\n");
}
catch(err){
process.stderr.write(err.message+"lol");
}
})
如果我只执行子文件,它工作正常,但是当我执行主文件时,它总是返回NaN
;为什么呢
另外,当我试图理解它的时候,我不太明白
child\u进程.spawn
和.exec
,spawn
返回流之间的区别,因此它有stdin/stdout,而exec
返回缓冲区,这是否意味着.exec
不能与子文件通信(反之亦然)除了传递包含options/env object的变量之外?对代码做了一些调整,它现在对我有用:
var spawn = require("child_process").spawn;
var child = spawn("node", ['plus_one.js']);
var number = 10;
setInterval(function () {
child.stdin.write(number++ + "\n");
child.stdout.once("data", function (data) {
console.log("Child replied to " + number + " with " + data);
});
}, 1000);
child.stderr.on("data", function (data) {
//process.stdout.write(data);
console.log("error" + data)
});
变化:
setInterval()
函数上使用了适当的支撑.once()
,这样事件处理程序就不会堆积起来number
变量移到setInterval()
范围之外,以便它可以在一次调用到下一次调用时保留其值您是否意识到您正在每个计时器间隔中添加一个新的
child.stdout.on()
处理程序,并且它们都将处于活动状态?哦,对了,对不起,应该是这样。一旦()和.on()进行了检查,就忘了将其放回,谢谢您的指出!