首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nodejs中event.on()和event.once()的区别

nodejs中event.on()和event.once()的区别
EN

Stack Overflow用户
提问于 2013-09-11 19:38:07
回答 2查看 22.3K关注 0票数 37

我正在测试plus_one应用程序,在运行它的同时,我只是想澄清一下我关于event.once()和event.on()的概念。

这是plus_one.js

代码语言:javascript
运行
复制
> 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

代码语言:javascript
运行
复制
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偏移警告,但使用child.stdin.once()时却不是这样,为什么会发生这种情况?

是因为child.stdin正在监听之前的输入吗?但在这种情况下,应该更频繁地设置maxlistener偏移量,但它只会立即发生一次或两次。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-11 21:23:05

使用EventEmitter.on()时,您可以附加一个完整的侦听器,而当您使用EventEmitter.once()时,它是一个一次性侦听器,在触发一次之后将分离。只触发一次的监听程序不计入最大监听程序计数。

票数 62
EN

Stack Overflow用户

发布于 2018-07-25 10:05:29

根据最新的官方文档https://nodejs.org/api/events.html#events_eventemitter_defaultmaxlisteners。.once()侦听器确实计入了maxlisteners。

代码语言:javascript
运行
复制
emitter.setMaxListeners(emitter.getMaxListeners() + 1);
emitter.once('event', () => {
  // do stuff
  emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
});
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18740123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档