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 相关文章推荐
jquery tools系列 expose 学习
Sep 06 Javascript
JavaScript 精粹读书笔记(1,2)
Feb 07 Javascript
jQuery实现鼠标经过图片预览大图效果
Apr 10 Javascript
jQuery中index()方法用法实例
Dec 27 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
Feb 02 Javascript
Bootstrap简单表单显示学习笔记
Nov 15 Javascript
js获取元素的偏移量offset简单方法(必看)
Jul 05 Javascript
解决vue接口数据赋值给data没有反应的问题
Aug 27 Javascript
vue+element 模态框表格形式的可编辑表单实现
Jun 07 Javascript
小程序如何自主实现拦截器的示例代码
Nov 04 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
Jan 16 Javascript
微信jssdk踩坑之签名错误invalid signature
May 19 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
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
2014/05/10 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
在漏洞利用Python代码真的很爽
2007/08/26 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
使用python实现生成用户信息
2017/03/20 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
思想汇报格式
2014/01/05 职场文书
2014年创卫实施方案
2014/02/18 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
政风行风评议心得体会
2014/10/21 职场文书
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
Python实现信息管理系统
2022/06/05 Python
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python