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 相关文章推荐
JavaScript 字符串连接性能优化
Dec 20 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 Javascript
jquery移动listbox的值原理及代码
May 03 Javascript
用jquery仿做发微博功能示例
Apr 18 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
Feb 26 Javascript
js实现网页多级级联菜单代码
Aug 20 Javascript
分享我对JS插件开发的一些感想和心得
Feb 04 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
Feb 26 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
May 11 Javascript
深入理解Webpack 中路径的配置
Jun 17 Javascript
vue的$http的get请求要加上params操作
Nov 12 Javascript
Javascript实现打鼓效果
Jan 29 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/10/09 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
JavaScript经典效果集锦
2010/07/06 Javascript
js中的string.format函数代码
2020/08/11 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
JS高级技巧(简洁版)
2018/07/29 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
用python 制作图片转pdf工具
2015/01/30 Python
python调用百度语音REST API
2018/08/30 Python
PyCharm配置mongo插件的方法
2018/11/30 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
python将字母转化为数字实例方法
2019/10/04 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
诗普兰迪官方网站:Splendid
2018/09/18 全球购物
大学生学习生活的自我评价
2013/11/01 职场文书
六一活动主持词
2015/06/30 职场文书
学生会招新宣传语
2015/07/13 职场文书
Django显示可视化图表的实践
2021/05/10 Python
Golang二维数组的使用方式
2021/05/28 Golang
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers