Api目录
1、简单的注册、触发事件的流程
2、eventEmitter.defaultMaxListeners
3、emitter.setMaxListeners(n)
4、emitter.getMaxListeners(n)
5、emitter.prependListener(eventName, listener);
6、emitter.prependOnceListener(eventName, listener)
7、emitter.removeListener(eventName, listener)
8、emitter.removeAllListeners(eventName)
9、emitter.off(eventName, listener)
10、emitter.eventNames()
11、emitter.on(‘eventName‘, listener)
12、emitter.once(‘eventName‘, listener)
13、emitter.emit(‘eventName‘, params)
一、什么是事件模块(events)
1、大多数Node.js核心Api都是采用惯用的异步事件驱动架构
2、所有能触发事件的对象都是EventEmitter类的实例
3、事件流程:引入模块 -> 实例化EventEmitter类 -> 注册事件 -> 触发事件
二、举例说明Api
1、简单的注册、触发事件的流程
// 引入事件模块 const eventEmitter= require(‘event‘).EventEmitter; // 实例化EventEmitter类 let emitter = new eventEmitter(); // 注册事件 emitter.on(‘someEvent‘, function(){ console.log(‘触发事件‘) }) // 触发事件 emitter.emit(‘someEvent‘)
// 打印:触发事件
注:node.js官方文档中,api的EventEmitter 和 emitter 在此所指:
a、所有 EventEmitter 对象指的就是 eventEmitter 对象
b、所有 emitter 实例,指的就是上面实例化的 emitter 对象
2、eventEmitter.defaultMaxListeners
EventEmitter下所有实例的可注册监听器个数的默认值. 默认是10个.(注:是改变EventEmitter下所有实例的);
console.log(eventEmitter.defaultMaxListeners); //打印:10
3、emitter.setMaxListeners(n)
改变指定的单个 EventEmitter 实例的最大注册数量; 值设为 Infinity(或 0)表示不限制监听器的数量。
4、emitter.getMaxListeners(n)
获取单个实例最大监听器数量
// 设置单个实例最大监听器数量 emitter.setMaxListeners(15); // 获取单个实例最大监听器数量 let getMaxListeners = emitter.getMaxListeners(); console.log(getMaxListeners); // 打印:15
5、emitter.prependListener(eventName, listener);
eventName: 已经注册的监听器名称
listener: Function 回调
用来指定多个相同eventName的监听器中,首先调用哪个listener回调.(原理是将指定监听器,添加到监听器数组的开头,本质还是顺序执行)
// test1 listener监听方法 function test1 () { console.log(‘a‘) } // test2 listener监听方法 function test2 () { console.log(‘b‘) } // 绑定foo事件 emitter.on(‘foo‘, test1); // 将test2监听器方法放在监听器数组的头部,首先执行 emitter.prependListener(‘foo‘, test2); emitter.emit(‘foo‘) // 打印:‘b‘ ‘a‘
6、emitter.prependOnceListener(eventName, listener)
eventName: 已经注册的监听器名称
listener: Function 回调
添加一个只能执行一次的eventName事件监听器,下次再触发时,当前监听器会被先移除,然后在调用.
添加单次监听器 listener 到名为 eventName 的事件的监听器数组的开头 ( 当 eventName 事件第二次触发时,监听器会先被移除,然后再调用。)
7、emitter.removeListener(eventName, listener)
从名为 eventName 的事件的监听器数组中移除指定的 listener
// removeListener:删除监听器触发 emitter.on("removeListener", function (event, listener) { console.log("移除了-" + event + "事件的" + listener "监听器") }); // 绑定test事件,并将tests作为test事件的listener emitter.on("test", tests); function tests(){ console.log("测试事件") }; // 触发test事件 emitter.emit("test"); // 删除test的事件监听数组中的tests监听器 emitter.removeListener("test", tests); // 打印: // 测试事件 // 移除了 test 事件的 tests 监听器
8、emitter.removeAllListeners(eventName)
移除全部监听器或指定的 eventName 事件的所有监听器。
// test1事件 只有一个监听器 emitter.on("test1", function (data) { console.log(data) }); // test2事件 只有一个监听器 emitter.on("test2", function (data) { console.log(data) }); // test3 事件有两个监听器 分别是 test3s 和 test3ss emitter.on("test3", test3s); emitter.on("test3", test3ss); function test3s(data) { console.log(data) } function test3ss(data) { console.log(data) } // 移除监听器触发 emitter.on("removeListener", function (event, listener) { console.log("移除了-" + listener + "事件") }); emitter.emit("test1", ‘1‘); // 1 emitter.emit("test2", ‘2‘); // 2 emitter.emit("test3", ‘3‘); // 3 3 //移除test3下面所有的监听器 emitter.removeAllListeners(‘test3‘); // 第一次:移除了test3s 第二次:移除了test3ss emitter.emit("test1", ‘4‘); // 4 emitter.emit("test2", ‘5‘); // 5 emitter.emit("test3", ‘6‘); // 无结果因为test3事件的监听器全部移除了
9、emitter.off(eventName, listener)
removeListener的别名
10、emitter.eventNames()
返回emitter实例下已注册的事件名数组。 数组中的值为字符串;
emitter.once(‘loadOnce‘, function () { console.log(); }); emitter.on(‘load‘, function () { console.log(); }); emitter.emit(‘load‘); console.log(emitter.eventNames()); // 打印:[ ‘loadOnce‘, ‘load‘ ] emitter.emit(‘loadOnce‘); console.log(emitter.eventNames()); // 打印:[‘load‘ ] // 原因: 因为once绑定的事件,执行一次之后就会移除。
11、emitter.on(‘eventName‘, listener)
eventName:事件名称
listener:回调函数
注册名称为eventName、回调函数为listener的事件
12、emitter.once(‘eventName‘, listener)
注册一次性名称为eventName,回调函数为listener的事件
注意:只触发一次,就会将其移除。
13、emitter.emit(‘eventName‘, params)
params:any 任意类型
触发名称为eventName的事件,按监听器数组顺序执行所有回调函数。
注意:以上nodejs事件的api,都是作者辛苦练习总结出来的,转载需注明转载地址,谢谢配合!
4、emitter.getMaxListeners(n)
原文地址:https://www.cnblogs.com/wangweizhang/p/10901605.html