本文实例讲述了Node.js EventEmmitter事件监听器用法。分享给大家供大家参考,具体如下:
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。
events 模块只提供了一个对象: events.EventEmitter
。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
该模块已被node.js默认引,不需要使用require()
显示引入。
EventEmitter 对象如果在实例化时发生错误,会触发 ‘error' 事件。当添加新的监听器时,'newListener' 事件会触发,当监听器被移除时,'removeListener' 事件被触发。
一、on(event, listener)
为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。
var myEvent = new events.EventEmitter(); var listener = function() { console.log('someEvent emit'); } myEvent.on('someEvent', listener); //这里是lambda表达式 setTimeout(() => myEvent.emit('someEvent'), 1000);
EventEmitter 的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件监听器。
当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。
var myEvent = new events.EventEmitter(); myEvent.on('someEvent', function(arg1,arg2) { console.log('someEvent 1 emit', arg1, arg2);}); myEvent.on('someEvent', (arg1,arg2) => console.log('someEvent 2 emit', arg1, arg2)); myEvent.emit('someEvent', 'arg1', 'arg2'); /* 输出 someEvent 1 emit arg1 arg2 someEvent 2 emit arg1 arg2 */
二、once(event, listener)
为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。
var myEvent = new events.EventEmitter(); myEvent.once('someEvent', function () { console.log('someEvent emit'); }); myEvent.emit('someEvent'); /* 返回 true 输出 someEvent emit */ myEvent.emit('someEvent'); //返回 false
三、removeListener(event, listener)
移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。
var myEvent = new events.EventEmitter(); var listener = () => console.log('someEvent emit'); myEvent.on('someEvent', listener); myEvent.removeListener('someEvent', listener); myEvent.emit('someEvent'); //返回 false
四、removeAllListeners([event])
移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。
五、setMaxListeners(n)
默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners
函数用于提高监听器的默认限制的数量。
六、listenerCount(emitter, event)
返回指定事件的监听器数量。
var myEvent = new events.EventEmitter(); myEvent.listenerCount(); //输出 0 events.EventEmitter.listenerCount(myEvent); //输出 0 events.EventEmitter.listenerCount(myEvent, 'someEvent'); //输出 0 myEvent.on('someEvent', () => console.log('someEvent emit')); myEvent.listenerCount(); //输出 0 events.EventEmitter.listenerCount(myEvent); //输出 0 events.EventEmitter.listenerCount(myEvent, 'someEvent'); //输出 1
七、error 事件
EventEmitter 定义了一个特殊的事件 error,它包含了错误的语义,我们在遇到 异常的时候通常会触发 error 事件。
当 error 被触发时,EventEmitter 规定如果没有响 应的监听器,Node.js 会把它当作异常,退出程序并输出错误信息。
我们一般要为会触发 error 事件的对象设置监听器,避免遇到错误后整个程序崩溃。
var myEvent = new events.EventEmitter(); myEvent.on('uncaughtException', (err) => { console.log('whoops! there was an error'); }); myEvent.emit('error', new Error('whoops!')); //输出 Error: whoops! myEvent.on('error', (err) => { console.log('whoops! there was an error'); }); myEvent.emit('error', new Error('whoops!')); //输出 whoops! there was an error
注意
大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。
为什么要这样做呢?原因有两点:
1. 具有某个实体功能的对象实现事件符合语义, 事件的监听和发射应该是一个对象的方法。
2. JavaScript 的对象机制是基于原型的,支持 部分多重继承,继承 EventEmitter 不会打乱对象原有的继承关系。
Events(事件)模块是Node.js的核心,许多其他模块用它来围绕着事件架构功能。由于Node.js运行在单一的线程中,任何同步代码都是阻塞的,所以如果有长时间运行的代码的话事件循环便会被阻塞。为了有效地使用Node.js编写代码,必须仔细思考自己的变成风格并遵循一些简单的规则。
- 别阻塞——Node.js是单线程的,如果代码阻塞的话所有其他的一切都会停止。
- 快速返回——操作应当快速返回。如果不能快速返回,就应道将其移到另一个进程中。
希望本文所述对大家nodejs程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 魔兽世界wlk暗牧一键输出宏是什么 wlk暗牧一键输出宏介绍
- 群星.1996-红不让台语原唱2辑【福和唱片】【WAV+CUE】
- 郭书瑶.2009-爱的抱抱(EP)【种子音乐】【FLAC分轨】
- 郑瑞芬.1989-BE.MY.BABY【现代】【WAV+CUE】
- 花钱请人每周放30万只不咬人的蚊子 防治登革热传播
- 饭制《第一后裔》丧尸版弗蕾娜
- 贝克汉姆亲临!2024FC品类游戏嘉年华圆满落幕
- 「命轨爻错之翼」风之翼发放说明
- 《原神》前瞻特别节目回顾长图
- 米游币抽抽乐-原神专场现已开启!
- 黑鸭子2001《风情中国HQCD》[日本版][WAV+CUE]
- 陈杰洲1990-成人礼[滚石][WAV+CUE]
- MarkAanderud-HandsFree(2024)[24-44,1]FLAC
- 孙露《观心》1:1母盘直刻限量版[低速原抓WAV+CUE][361M]
- 钟志刚《汽车DJ玩主》[低速原抓WAV+CUE][1G]