Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 子进程生成返回NaN_Javascript_Node.js - Fatal编程技术网

Javascript 子进程生成返回NaN

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

我试图理解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");
    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()进行了检查,就忘了将其放回,谢谢您的指出!