当前位置: 首页 > 后端技术 > Node.js

EventEmitter讨论

时间:2023-04-03 10:18:46 Node.js

Node.jsEventEmitterNode.js所有异步I/O操作在完成时都会向事件队列发送一个事件。Node.js中的许多对象都会派发事件:net.Server对象会在每次建立新连接时发出一个事件,而fs.readStream对象会在文件打开时发出一个事件。所有这些事件发射对象都是events.EventEmitter的实例。EventEmitter类events模块只提供一个对象:events.EventEmitter。EventEmitter的核心是对事件触发和事件监听函数的封装。您可以通过require("events");访问此模块。//导入事件模块varevents=require('events');//创建一个eventEmitter对象vareventEmitter=newevents.EventEmitter();如果在EventEmitter对象的实例化过程中发生错误,则会触发错误事件。添加新侦听器时会触发newListener事件,移除侦听器时会触发removeListener事件。下面我们用一个简单的例子来说明EventEmitter的用法://event.js文件varEventEmitter=require('events').EventEmitter;varevent=newEventEmitter();event.on('some_event',function(){console.log('some_event事件触发器');});setTimeout(function(){event.emit('some_event');},1000);执行结果如下:运行这段代码,1秒后控制台输出'some_eventeventfires'。原理是事件对象为事件some_event注册了一个监听器,然后我们在1000毫秒后通过setTimeout将事件some_event发送给事件对象,此时会调用some_event的监听器。$nodeevent.jssome_eventEventEmitter触发的每个事件都由一个事件名称和几个参数组成。事件名称是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter支持多个事件侦听器。当一个事件被触发时,依次调用注册到该事件的事件监听器,并将事件参数作为回调函数参数传递。让我们用下面的例子来解释这个过程://event.js文件varevents=require('events');varemitter=newevents.EventEmitter();emitter.on('someEvent',function(arg1,arg2){console.log('listener1',arg1,arg2);});emitter.on('someEvent',function(arg1,arg2){console.log('listener2',arg1,arg2);});发射器。emit('someEvent','arg1参数','arg2参数');执行上面的代码,结果如下:$nodeevent.jslistener1arg1parameterarg2parameterlistener2arg1parameterarg2parameter上面的例子中,为事件someEvent注册了emitter,添加了两个事件监听器,someEvent事件被解雇了。在运行结果中,可以看到先后调用了两个事件监听回调函数。这是EventEmitter最简单的用法。