node.js中事件触发器events的使用方法实例分析


Posted in Javascript onNovember 23, 2019

本文实例讲述了node.js中事件触发器events的使用方法。分享给大家供大家参考,具体如下:

node.js是基于事件驱动的,通过events,我们可以方便的创建事件,并通过触发事件来调用我们自定义的监听函数。

所有能触发事件的对象都应该是 EventEmitter 类的实例,一般我们自定义一个类继承于 EventEmitter 类。

通过on()方法我们可以绑定事件与监听函数:

const Events = require('events');
//自定义一个类,继承于EventEmitter类
class MyEvent extends Events {
}
//实例化一个我们自定义的事件类
let e = new MyEvent();
//通过on来绑定事件与监听函数
e.on('click', function () {
  console.log('点击了');
});
//通过emit触发事件
e.emit('click');

emit()方法可以传递多个参数给监听函数使用:

const Events = require('events');
//自定义一个类,继承于EventEmitter类
class MyEvent extends Events {
}
//实例化一个我们自定义的事件类
let e = new MyEvent();
//通过on来绑定事件与监听函数
e.on('click', function (...args) {
  args.forEach(function (value) {
    console.log(value);
  });
});
//通过emit触发事件
e.emit('click', 1, 2, 3);

addListener()方法是on()方法的别名,具体的使用,可以看on()方法。

once() 方法添加单次执行的事件与监听函数,只会执行一次。

const Events = require('events');
//自定义一个类,继承于EventEmitter类
class MyEvent extends Events {
 
}
//实例化一个我们自定义的事件类
let e = new MyEvent();
e.once('click', function () {
  console.log('点击');
});
//多次触发事件,只会执行一次
e.emit('click');
e.emit('click');
e.emit('click');

我们也可以通过 removeListener() 方法删除指定的监听处理函数,还有一个同名函数 off(),用法一样。

const Events = require('events');
//自定义一个类,继承于EventEmitter类
class MyEvent extends Events {
}
//实例化一个我们自定义的事件类
let e = new MyEvent();
function click() {
  console.log('点击');
}
function move() {
  console.log('移动');
}
e.on('事件', click);
e.on('事件', move);
//触发事件
e.emit('事件');
//我们删除其中一个绑定事件
e.off('事件', click);
//再次触发事件后,被删除的绑定事件就无法执行了。
e.emit('事件');

当我们为某个事件绑定过多监听函数时,就会打印警告,默认是 10 个,我们可以使用 setMaxListeners() 来设置最大监听数量

const Events = require('events');
//自定义一个类,继承于EventEmitter类
class MyEvent extends Events {
}
//实例化一个我们自定义的事件类
let e = new MyEvent();
function click() {
  console.log('点击');
}
//如果设置0,则表示不受限制
e.setMaxListeners(0);
e.on('事件', click);
e.on('事件', click);
e.on('事件', click);
e.on('事件', click);
e.on('事件', click);
e.on('事件', click);
e.on('事件', click);
e.on('事件', click);
e.on('事件', click);
e.on('事件', click);
e.on('事件', click);
e.emit('事件');

通过 listeners() 函数可以返回指定事件的所有监听函数

const Events = require('events');
//自定义一个类,继承于EventEmitter类
class MyEvent extends Events {
}
//实例化一个我们自定义的事件类
let e = new MyEvent();
function click() {
  console.log('点击');
}
function move() {
  console.log('移动');
}
e.on('事件', click);
e.on('事件', move);
//获取该事件的所有监听函数
let arr = e.listeners('事件');
//循环调用
arr.forEach(function (fn) {
  fn();
});

通过 eventNames() 获取所有事件名数组

const Events = require('events');
//自定义一个类,继承于EventEmitter类
class MyEvent extends Events {
}
//实例化一个我们自定义的事件类
let e = new MyEvent();
function click() {
  console.log('点击');
}
function move() {
  console.log('移动');
}
e.on('点击', click);
e.on('移动', move);
//获取所有事件名数组
console.log(e.eventNames());

事件对象的 'newListener' 和 'removeListener' 事件

事件对象添加新的监听器之前,会触发自身的 'newListener' 事件。

事件对象删除监听器后触发 'removeListener' 事件。

const Events = require('events');
class MyEvent extends Events {
}
let e = new MyEvent();
//注意 'newListener' 事件是在添加监听器之前触发的
e.once('newListener', function (eventName, listener) {
  console.log(eventName, '事件被添加');
  //所以这里的事件回调会先执行
  e.on('click', function () {
    console.log('我比点击了,先显示');
  });
});
//注意 'removeListener' 事件是在监听器移除后触发
e.on('removeListener', function (eventName, listener) {
  console.log(eventName, '事件被删除');
});
//绑定click事件
e.on('click', function () {
  console.log('点击了');
});
//触发click事件
e.emit('click');
//移除事件
e.removeAllListeners('click');

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
动态创建的表格单元格中的事件实现代码
Dec 30 Javascript
js写一个弹出层并锁屏效果实现代码
Dec 07 Javascript
JavaScript 产生不重复的随机数三种实现思路
Dec 13 Javascript
js遍历、动态的添加数据的小例子
Jun 22 Javascript
js charAt的使用示例
Feb 18 Javascript
JavaScript错误处理
Feb 03 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
微信小程序 绘图之饼图实现
Oct 24 Javascript
angularjs1.5 组件内用函数向外传值的实例
Sep 30 Javascript
vue 解决form表单提交但不跳转页面的问题
Oct 30 Javascript
js实现计时器秒表功能
Dec 16 Javascript
JS中==、===你分清楚了吗
Mar 04 Javascript
javascript 原型与原型链的理解及实例分析
Nov 23 #Javascript
jquery 插件重新绑定的处理方法分析
Nov 23 #jQuery
微信小程序实现录音功能
Nov 22 #Javascript
小程序实现按下录音松开识别语音
Nov 22 #Javascript
小程序采集录音并上传到后台
Nov 22 #Javascript
webpack优化之代码分割与公共代码提取详解
Nov 22 #Javascript
小程序实现录音上传功能
Nov 22 #Javascript
You might like
第十一节--重载
2006/11/16 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
jQuery ajax cache缓存问题
2010/07/01 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
Vue实现购物车功能
2017/04/27 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
python异步任务队列示例
2014/04/01 Python
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
浅谈Python NLP入门教程
2017/12/25 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
十周年庆典策划方案
2014/06/03 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
运动会报道稿大全
2015/07/23 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书