模块概述events模块是node.js中的核心模块之一。几乎所有常用的节点模块都继承了事件模块。比如net.Server每次有新连接都会触发事件,fs.ReadStream会在文件打开时触发事件,stream会在数据可读时触发事件等等。events模块本身很简单的。从官网文档中我们发现,这个模块的API虽然很多,但是我们常用的就那么几个。让我们来看几个简单的例子。示例1:单个事件侦听器')})dog.emit('eat')//一只狗正在吃食物!示例2:同一个事件,多个事件监听器dogeatingfood')})dog.on('eat',function(){console.log('adogeating')})dog.emit('eat')//adogeatingfood//adogeating从上面我们可以看出,当一个事件被触发时,事件监听器是按照注册的顺序执行的。示例3:只运行一次的事件侦听器吃食物')})dog.once('吃',function(){console.log('狗吃一次食物')})dog.emit('吃')dog.emit('eat')//adogeatingfood//adogeatingfoodonce//adogeatingfood示例4:在注册时间监听器之前,先触发事件AnimalextendsEventEmitter{}letdog=newAnimal()dog.emit('eat',1)dog.on('eat',function(index){console.log('adogeatingfood-'+index)})dog.emit('eat',2)//adogeatingfood-2从上面的例子我们可以看出,如果在注册时间监听器之前触发了事件,则直接忽略该事件。示例5:执行顺序letEventEmitter=require('events')classAnimalextendsEventEmitter{}letdog=newAnimal()dog.on('eat',function(){console.log('adogeatingfood1')})dog.emit('eat')dog.on('eat',function(){console.log('adogeatingfood2')})//adogeatingfood1//adogeatingfood1示例6:移除事件监听器,eat)dog.emit('eat')狗。removeListener('eat',eat)//一只狗正在吃食物
