NodeJs简明教程将从零开始学习NodeJs相关知识,帮助JS开发者搭建全栈开发技术栈!本文是NodeJs简明教程的第七部分,将介绍NodeJs事件模块相关的基本操作。大多数Node.js核心API都构建在惯用的异步事件驱动架构上,其中某些类型的对象(又名Emitter)触发命名事件以调用函数(又名Listeners)。快速开始使用事件监听器一般包括以下操作:创建一个新的事件监听器实例设置监听器函数触发事件constEventEmitter=require('events');//引用模块classMyEmitterextendsEventEmitter{}//初始化监听器constmyEmitter=newMyEmitter();myEmitter.on('event',()=>{//设置监听器函数console.log('aneventoccurred!');});myEmitter.emit('事件');//触发事件上面的例程会输出一个事件发生!一次性事件监控。上面的监控方法事件触发了几次,一个事件发生了!会输出几次。有些事件可能是一次性的。这个时候可以用once来监控。constEventEmitter=require('事件');//引用模块classMyEmitterextendsEventEmitter{}//初始化监听器constmyEmitter=newMyEmitter();myEmitter.once('event',()=>{//设置监听器函数console.log('aneventoccurred!');});myEmitter.emit('事件');//触发事件myEmitter.emit('event');//触发事件以上例程将输出一次事件发生!;多次监视同一事件。上述监控方式只有一个监控功能,多次调用可以设置多个监控功能。constEventEmitter=require('events');classMyEmitterextendsEventEmitter{}constmyEmitter=newMyEmitter();myEmitter.once('event',()=>{//Listener1console.log('Listener1Eventreceived');});myEmitter.on('event',()=>{//Listener2console.log('Listener2receivedevent');})myEmitter.emit('event');//上面触发事件的例程会输出监听器1接收到事件,监听器2接收到事件。emit函数第一个值是事件名,后面的参数是事件值on和once回调函数接收到的值是emit传入的事件参数constEventEmitter=require('events');classMyEmitterextendsEventEmitter{}constmyEmitter=newMyEmitter();myEmitter.once('event',(param1,param2,param3)=>{//接收事件参数console.log('receivedevent',param1,param2,param3);});myEmitter.emit('event','parameter1','param2',{name:'parameter3'});//发送事件参数以上例程将输出接收到的事件参数1参数2{name:'parameter3'}获取事件监听器上的所有事件使用eventNames()实例方法获取所有事件的监听器constEventEmitter=require('事件');类MyEmitter扩展EventEmitter{}constmyEmitter=newMyEmitter();myEmitter.once('event',(param1,param2,param3)=>{console.log('接收事件',param1,param2,param3);});myEmitter.once('event2',()=>{console.log('收到事件2');});console.log(myEmitter.eventNames());上面例程输出['event','event2']移除事件监听器使用off实例方法移除单个监听器constEventEmitter=require('events');classMyEmitterextendsEventEmitter{}constmyEmitter=newMyEmitter();constcallback=(param1)=>{console.log(param1);};myEmitter.on('event',callback);//添加监听器myEmitter.off('event',callback);//移除监听器myEmitter.emit('event');//triggereventabove该例程没有输出,因为监听器是先添加后移除。当事件被触发时,没有可用的侦听器。移除所有监听器。使用removeAllListeners([eventName])实例方法移除所有侦听器。removeAllListener不传递参数。除了发射器实例上的所有事件侦听器之外,removeAllListener在传入字符串参数时删除发射器实例上的所有事件侦听器读者会好好照顾它。阅读活动模块后如有任何疑问,请加入微信群讨论。
