事件模块中,使用on
注册事件,使用emit
触发事件,二者构成了最简单的事件模块的demo:
// 引入模块
const EventEmitter = require("events");
// 创建MyEventEmitter类
class MyEventEmitter extends EventEmitter { }
// 实例化对象
const myEventEmitter = new MyEventEmitter();
// 注册事件,事件名为event
myEventEmitter.on('event', (msg) => {
console.log(msg);
})
// 触发event事件,并传入参数
myEventEmitter.emit("event","实现事件并将此参数传递到回调函数中");
console.log(1);
执行效果:
先输出"实现事件并将此参数传递到回调函数中",再输出1(同步)
- EventEmitter 以注册的顺序同步地调用所有监听器。 这样可以确保事件的正确排序,并有助于避免竞态条件和逻辑错误。
- 当适当时,监听器函数可以使用 setImmediate() 和 process.nextTick() 方法切换到异步的操作模式
如果我们使用异步事件:
// 注册事件,事件名为event
myEventEmitter.on('event', (msg) => {
setImmediate(() => {
console.log(msg);
});
// console.log(msg);
})
效果:先输出1,再输出"实现事件并将此参数传递到回调函数中"