nodejs 的event问题

新手上路,请多包涵

const EventEmitter = require('events');

let emitter = new EventEmitter();

emitter.on('myEvent', function sth () {
    console.log('hi');
});
setTimeout(()=>{
    emitter.on('myEvent', function(){
        console.log('fuck');
    });
},1000);
emitter.emit('myEvent');
const EventEmitter = require('events');

let emitter = new EventEmitter();

emitter.on('myEvent', function sth () {
    emitter.on('myEvent', function(){
        console.log('fuck');
    });
    console.log('hi');
});

emitter.emit('myEvent');
const EventEmitter = require('events');

let emitter = new EventEmitter();

emitter.on('myEvent', function sth () {
    console.log('hi');
});
emitter.on('myEvent', function(){
    console.log('fuck');
});
emitter.emit('myEvent');

以上三种方式,返回三个不同的结果,想请问是为什么?

阅读 2.1k
2 个回答
  • 第一个:输出hi;因为触发myEvent时,延时中的第二个myEvent事件还没有添加进去。

  • 第二个:输出hi;触发myEvent后,第二个myEvent事件才添加进去。

  • 第三个:输出hi fuck;两个myEvent事件都添加上了。

如果输出结果和我说的不一致,请指正。

事件 emit 时,把监听器一个个触发一遍就完了,不会留存下来,所以要在 emit 前监听。第一个和第二个都是在 emit 之后才绑定监听器。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题