Api目录
2、eventEmitter.defaultMaxListeners
5、emitter.prependListener(eventName, listener);
6、emitter.prependOnceListener(eventName, listener)
7、emitter.removeListener(eventName, listener)
8、emitter.removeAllListeners(eventName)
9、emitter.off(eventName, listener)
11、emitter.on(‘eventName‘, listener)
12、emitter.once(‘eventName‘, listener)
13、emitter.emit(‘eventName‘, params)
一、什么是事件模块(events)
1、大多数Node.js核心Api都是采用惯用的异步事件驱动架构
2、所有能触发事件的对象都是EventEmitter类的实例
3、事件流程:引入模块 -> 实例化EventEmitter类 -> 注册事件 -> 触发事件
// 引入事件模块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
改变指定的单个 EventEmitter 实例的最大注册数量; 值设为 Infinity(或 0)表示不限制监听器的数量。
获取单个实例最大监听器数量
// 设置单个实例最大监听器数量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事件的listeneremitter.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 和 test3ssemitter.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‘); // 1emitter.emit("test2", ‘2‘); // 2emitter.emit("test3", ‘3‘); // 3 3//移除test3下面所有的监听器emitter.removeAllListeners(‘test3‘); // 第一次:移除了test3s 第二次:移除了test3ss emitter.emit("test1", ‘4‘); // 4emitter.emit("test2", ‘5‘); // 5emitter.emit("test3", ‘6‘); // 无结果因为test3事件的监听器全部移除了
9、emitter.off(eventName, listener)
removeListener的别名
返回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,都是作者辛苦练习总结出来的,转载需注明转载地址,谢谢配合!