一、events模块的常用方法

// 事件总线
const EventsEmitter = require('events');

const emitter = new EventsEmitter();

function HLog(msg){
    console.log(msg);
}

// 监听
emitter.on('hlog', HLog);

setTimeout(() => {
    // 触发,打印
    emitter.emit('hlog', 'hello emitter!')

    // 取消监听后,发射的事件就监听不到了
    emitter.off('hlog', HLog);
    setTimeout(() => {
        // 再触发,未打印
        emitter.emit('hlog', 'hello emitter again!')
    }, 1000);
}, 2000)

二、events模块的其他方法

const EventsEmitter = require('events');
const ee = new EventsEmitter();
ee.on('func1', ()=>{  })
ee.on('func1', ()=>{  })
ee.on('func1', ()=>{  })

ee.on('func2', ()=>{  })
ee.on('func2', ()=>{  })

// 1.获取所有监听事件的名称
console.log(ee.eventNames());

// 2.获取最大的监听个数
console.log(ee.getMaxListeners());

// 3.获取某一个事件名称对应的监听个数
console.log(ee.listenerCount('func1'));

// 4.获取某一个事件名称对应的监听器函数(数组)
console.log(ee.listeners('func1'));

// 5.once:只监听一次
ee.once('func3', ()=> {
    console.log('func3!');
})

ee.emit('func3');
ee.emit('func3');
ee.emit('func3');

// 6.prependListener:前置监听
ee.on('func2', ()=>{
    console.log('func2 second');
})
ee.prependListener('func2', () => {
    console.log('func2 first!');
})
ee.emit('func2');

// 7.prependOnceListener:前置且只监听一次
ee.on('func1', ()=>{
    console.log('func1 second');
})
ee.prependOnceListener('func1', () => {
    console.log('func1 first!');
})
ee.emit('func1');
ee.emit('func1');

// 8.移除监听
ee.on('func3', ()=> {
    console.log('func3!');
})
ee.emit('func3');
ee.removeAllListeners();
ee.emit('func3');
11-21 11:49