无涯教程网: Node中的许多对象都会发出事件,例如net.Server每次对等点连接到它时都会发出一个事件,而fs.readStream在文件打开时会发出一个事件。发出事件的所有对象都是events.EventEmitter的实例。
EventEmitter类如上一节所述,EventEmitter类位于事件模块中。可通过以下代码访问-
//Import events modulevar events=require(\'events\');
//Create an eventEmitter object
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
event - 事件名称
listener - 事件处理函数
每当添加侦听器时都会发出此事件,触发此事件后,可能尚未将侦听器添加到该事件的侦听器数组中。
2
removeListener
event - 字符串事件名称
listener - 函数事件处理函数
每当有人删除侦听器时,都会发出此事件,触发此事件后,可能尚未从该事件的侦听器数组中删除该侦听器。
示例代码
使用以下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.\');
}
//Bind the connection event with the listner1 function
eventEmitter.addListener(\'connection\', listner1);
//Bind the connection event with the listner2 function
eventEmitter.on(\'connection\', listner2);
var eventListeners=require(\'events\').EventEmitter.listenerCount
(eventEmitter,\'connection\');
console.log(eventListeners + " Listner(s) listening to connection event");
//Fire the connection event
eventEmitter.emit(\'connection\');
//Remove the binding of listner1 function
eventEmitter.removeListener(\'connection\', listner1);
console.log("Listner1 will not listen now.");
//Fire the connection event
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 eventlistner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.
https://www.learnfk.com/article-nodejs/nodejs_event_emitter