node.js学习的事件模块使用示例
序
本文主要介绍一些使用node.js事件模块Events的例子,并分享给大家参考和学习。下面就不多说了。我们来看看详细的介绍。
环境:节点v 8 . 2 . 1;NPM v 5 . 3 . 0;操作系统窗口10
1.节点事件介绍
Node的大多数核心API采用通常的异步事件驱动架构,其中一些类型的对象(触发器)周期性地触发命名事件来调用函数对象(侦听器)。
所有能够触发事件的对象都是EventEmitter类的实例。这些对象打开一个eventEmitter.on()函数,允许一个或多个函数绑定到将由该对象触发的命名事件。事件名称通常是驼峰字符串,但是可以使用任何有效的JavaScript属性名称。
当事件发射器对象触发一个事件时,所有绑定到该事件的函数都会被同步调用。侦听器的返回值被丢弃。
2.事件模块应用编程接口介绍
3.一些例子
这里有一些简单的例子,对应于上面API的一个代码实现
3.1绑定和触发事件
const event emitter=require(' events ');//定义一个继承自event mieter class my mitter extends event emitter { } const my mitter=new my mitter();My emitter.on ('event ',()={console.log('触发了一个事件!');});my mitter . emit(' event ');3.2为事件传递参数
const event emitter=require(' events ');class MyEmitter扩展了event emitter { } const MyEmitter=new MyEmitter();myEmitter.on('event ',(a,b)={ console.log(a,b);//1,2});my mitter . emit(' event ',' a ',' b ');3.3这个问题的这个
当事件发射器调用普通的侦听器函数时,标准的this关键字将被设置为指向附加到侦听器的事件发射器。
const event emitter=require(' events ');class MyEmitter扩展了event emitter { } const MyEmitter=new MyEmitter();my mitter . on(' event ',function(){ console . log(this);/* a b my mitter { domain : null,_ event 3360 { event :[Function]},_eventsCount: 1,_ maxlistener 3360 undefined } */});my mitter . emit(' event ');您也可以使用ES6的箭头函数作为监听器。但是这个关键字不再指向事件发射器实例:
const event emitter=require(' events ');class MyEmitter扩展了event emitter { } const MyEmitter=new MyEmitter();my mitter . on(' event ',()={ console . log(this);//{}});my mitter . emit(' event ');3.4异步执行
EventListener将按照注册的顺序同步调用所有侦听器,侦听器函数可以使用setImmediate()或process.nextTick()方法切换到异步操作模式:
const event emitter=require(' events ');class MyEmitter扩展了event emitter { } const MyEmitter=new MyEmitter();我的发射器。on ('event ',(a,b)={ set immediate(()={//异步触发console.log(a,b);})console . log(' c ');});my mitter . emit(' event ',' a ',' b ');//c//a b3.5无限触发器和一个触发器
默认情况下,事件可以无限期触发。一旦触发,相应的监听功能将执行一次。有时我们只想执行一次监听功能,我们可以使用[一次]来绑定事件
多个触发器:
const event emitter=require(' events ')类MyEmitter扩展了event emitter { } const MyEmitter=new MyEmitter();设m=0;my mitter . on(' event ',()={ console . log(m);});my mitter . emit(' event ');//1myemitter . emit(' event ');//2myemitter . emit(' event ');//3一个触发器:
const event emitter=require(' events ')类MyEmitter扩展了event emitter { } const MyEmitter=new MyEmitter();设m=0;my mitter . once(' event ',()={ console . log(m);});my mitter . emit(' event ');//1myemitter . emit(' event ');//忽略my mitter . emit(' event ');//忽略3.6错误事件
当事件发射器实例中出现错误时,将触发“错误”事件。如果事件发射器没有为“错误”事件注册至少一个侦听器,当触发“错误”事件时,将引发错误,打印堆栈跟踪,并退出Node.js进程。
const事件发射器=require(' events ');类别MyEmitter扩展了事件发射器{ } const MyEmitter=new MyEmitter();myEmitter.emit('错误,新错误('呜呜!'));//抛出错误,并使Node.js崩溃为了防止Node.js进程崩溃,可以在过程对象的无图表异常事件上注册监听器
const事件发射器=require(事件)类我的委员会扩展了事件发射器{ } const MyEmitter=new MyEmitter();//在进程上面注册错误监听,使进程不崩溃过程。on(' UnCarthException ',()={ console.error('有错误');});myEmitter.emit('错误,新错误('呜呜)上面这样的方式并不是最佳实践,最好是为【错误】注册监听函数
3.7 获取和修改最大事件监听数量
结节默认一个事件的监听数量为10个,超过十个将会发出警告
const事件发射器=require(事件)类我的委员会扩展了事件发射器{ } const MyEmitter=new MyEmitter();控制台。日志(事件发射器。defaultmaxlisteners);//10for(设I=0;我的密特朗。on(' event ',()={ console。日志(一);});}我的密特朗。emit(' event ')//maxlisteners ceed warn :检测到可能的事件发出内存泄漏。添加了11个事件侦听器。使用emitter.setMaxListeners()增加限制改变指定的事件发射器实例的监听器限制
const事件发射器=require(事件)类我的委员会扩展了事件发射器{ } const MyEmitter=new MyEmitter();我的密特朗。setmaxlisteners(13);用于(设I=0;我的密特朗。on(' event ',()={ console。日志(一);});}我的密特朗。发出('事件')3.8新列表事件
事件发射器实例会在一个监听器被添加到其内部监听器数组【之前】触发自身的' newListener '事件
const事件发射器=require(事件)类我的主人扩展了事件发射器{ } const my mitter=new my mitter()。once(' newListener ',(event,listener)={ if(event==' event '){ my mitter。on(' event ',()={ console。日志(' B ');}) }});我的主人。on(' event ',()={ console。日志(' A ');});我的主人。发出('事件')/* BA */总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
版权声明:node.js学习的事件模块使用示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。