----events
大多数nodejs核心API构建于惯用的异步事件驱动架构,其中某些类型的对象(触发器 Emitter)会触发命名事件来调用函数(监听器 Listener)
所有能触发事件的对象都是EventEmitter类的实例;当EventEmitter对象触发一个事件时,所有绑定在该事件上的函数都会被同步的调用;被调用的监听器返回的任何值都将会被忽略并丢弃
const EventEmitter = require('events');
const eventEmitter = new EventEmitter();
对象eventEmitter有2个方法:on和emit
emit用于触发事件 可以传任意数量的参数到监听器函数,当监听器函数被调用时,this关键词会被指向监听器所绑定的EventEmitter实例,如果用箭头函数,则this不会指向绑定的EventEmitter实例
on用于添加回调函数(会在事件被触发时执行)
once() 添加单次监听器
removeListener()/off() 从事件中移除事件监听器
removeAllListeners() 移除事件的所有监听器
例如:eventEmitter.on('start', (data)=>{ console.log(`---开始---${data}`); }); 当执行到eventEmitter.emit('start', 10)时,事件处理函数会被触发,会打印信息
--异步 同步
EventEmitter以注册的顺序同步的调用所有监听器
可以使用setImmediate()和process.nextTick()方法切换到异步的操作模式
eventEmitter.on('start', (data)=>{ setImmediate(()=>{ console.log('异步'); }); })
--错误事件
当EventEmitter实例出错时,应该触发'error'事件;如果没有为'error'事件注册监听器,当'error'事件触发时,会抛出错误、打印堆栈跟踪并退出nodejs进程
可以为'error'事件注册监听器 myEmitter.emit('error',new Error('错误'));