码迷,mamicode.com
首页 > Web开发 > 详细

Node.js 事件触发器详细总结

时间:2019-05-21 19:32:55      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:nodejs   test   get   items   remove   end   item   举例   inf   

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)

Node.js 事件触发器详细总结

标签:nodejs   test   get   items   remove   end   item   举例   inf   

原文地址:https://www.cnblogs.com/wangweizhang/p/10901605.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!