在Node.js中,event.on()和event.once()之间的区别是什么?

45
我正在测试 plus_one 应用,运行它时,我想澄清一下关于 event.once() 和 event.on() 的概念。
这是 plus_one.js。
> 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+"\n");
        }
    });

这是test_plus_one.js文件

var spawn=require('child_process').spawn;
var child=spawn('node',['plus_one.js']);

setInterval(function(){
    var number=Math.floor(Math.random()*10000);
    child.stdin.write(number+"\n");
    child.stdout.on('data',function(data){
        console.log('child replied to '+number+' with '+data);
        });
    },1000);

当我使用child.stdin.on()时,我会收到一些maxlistener offset警告,但是当我使用child.stdin.once()时,这种情况并不会发生,这是为什么?

这是因为child.stdin正在侦听以前的输入吗?但在这种情况下,maxlistener偏移量应更频繁地设置,但它每分钟只发生一两次。

2个回答

75

使用 EventEmitter.on() 时,您会附加一个完整的监听器;而使用 EventEmitter.once() 时,它是一个一次性的监听器,在发生一次后就会自动分离。仅触发一次的监听器不计入最大监听器数。


10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接