Node中的许多对象都会发出事件,例如net.Server每次对等点连接到它时都会发出一个事件,而fs.readStream在文件打开时会发出一个事件。发出事件的所有对象都是events.EventEmitter的实例。
EventEmitter类
如上一节所述,EventEmitter类位于事件模块中。可通过以下代码访问-
//导入事件模块 var events=require('events'); //创建一个 eventEmitter 对象 var eventEmitter=new events.EventEmitter();
当EventEmitter遇到任何错误时,它将发出"error"事件,添加新的侦听器时,将触发" newListener"事件,而当删除侦听器时,将触发" removeListener"事件
EventEmitter提供了多个属性,如 on 和 emit ,on 属性用于将函数与事件绑定,而 emit 用于触发事件。
EventEmitter方法
Sr.No. | Method & 描述 |
---|---|
1 |
addListener(event,listener) 在侦听器数组的末尾为指定事件添加一个侦听器。 |
2 |
on(event,listener) 在侦听器数组的末尾为指定事件添加一个侦听器。 |
3 |
once(event,listener) 向事件添加一次侦听器,仅在下次触发事件时才调用此侦听器,然后将其删除。 |
4 |
removeListener(event,listener) 从侦听器数组中删除指定事件的侦听器。 |
5 |
removeAllListeners([event]) 删除所有侦听器,或指定事件的侦听器。 |
6 |
setMaxListeners(n) 默认情况下,如果为特定事件添加了10个以上的侦听器,则EventEmitters将打印警告。设置为零表示无限。 |
7 |
listeners(event) 返回指定事件的侦听器数组。 |
8 |
emit(event,[arg1],[arg2],[...]) 使用提供的参数按顺序执行每个侦听器,如果事件具有侦听器,则返回true,否则返回false。 |
Class 方法
Sr.No. | Method & 描述 |
---|---|
1 |
listenerCount( emitter,event) 返回给定事件的侦听器数。 |
Events 事件
Sr.No. | 大事记 & 描述 |
---|---|
1 |
newListener
每当添加侦听器时都会发出此事件,触发此事件后,可能尚未将侦听器添加到该事件的侦听器数组中。 |
2 |
removeListener
每当有人删除侦听器时,都会发出此事件,触发此事件后,可能尚未从该事件的侦听器数组中删除该侦听器。 |
示例代码
使用以下Node.js代码创建一个名为main.js的js文件-
var events=require('events'); var eventEmitter=new events.EventEmitter(); //listener #1 var listner1=function listner1() { console.log('listner1 executed.'); } //listener #2 var listner2=function listner2() { console.log('listner2 executed.'); } //用listner1函数绑定连接事件 eventEmitter.addListener('connection', listner1); //用listner2函数绑定连接事件 eventEmitter.on('connection', listner2); var eventListeners=require('events').EventEmitter.listenerCount (eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); //触发连接事件 eventEmitter.emit('connection'); //移除listner1函数的绑定 eventEmitter.removeListener('connection', listner1); console.log("Listner1 will not listen now."); //触发连接事件 eventEmitter.emit('connection'); eventListeners=require('events').EventEmitter.listenerCount(eventEmitter,'connection'); console.log(eventListeners + " Listner(s) listening to connection event"); console.log("Program Ended.");
现在运行main.js以查看输出-
$node main.js
验证输出。
2 Listner(s) listening to connection event listner1 executed. listner2 executed. Listner1 will not listen now. listner2 executed. 1 Listner(s) listening to connection event Program Ended.
参考链接
https://www.learnfk.com/nodejs/nodejs-event-emitter.html
标签:Node,eventEmitter,无涯,EventEmitter,js,侦听器,connection,事件,event From: https://blog.51cto.com/u_14033984/9352625