关于事件循环,此前分析过2次,也记录过,分别为
js世界里的进程、线程、协程和eventloop WebWorker与事件循环
回过头来再看时,发现还是没能真正理解它,于是就有了第三篇浏览器环境和Node环境中的事件循环
每一次的理解都会让我对它有新的认识。
本文也涉及观察者与发布订阅模式

概念

应该称之为事件订阅与触发器,它是一个类EventEmitter,nodejs中很多api都具有这个类的属性和方法

例如

server.on('request', () => {})

readStream.on('data', chunk => {})

模式都是EventEmitter的实例用on去注册一个回调函数,绑定到相应的事件上,requestdata等。

事件由实例的emit触发,例如eventEmitter.emit('data')

注意点

EventEmitter 类

实例的方法

newListenerremoveListener事件

当实例on()监听时,会触发实例的newListener事件,同理,当实例off()时,会触发removeListener事件

myEmitter.once('newListener', (event, listener) => {
  if (event === 'event') {
    // 在前面插入一个新的监听器。
    myEmitter.on('event', () => {
      console.log('B')
    })
  }
})
myEmitter.on('event', () => {
  console.log('A')
})
myEmitter.emit('event')
// B
// A