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 相关文章推荐
用ASP将SQL搜索出来的内容导出为TXT的代码
Jul 27 Javascript
jQuery 表格工具集
Apr 25 Javascript
jquery实现的图片点击滚动效果
Apr 29 Javascript
JQuery控制radio选中和不选中方法总结
Apr 15 Javascript
浅谈JavaScript 的执行顺序
Aug 07 Javascript
微信开发 消息推送实现代码
Oct 21 Javascript
javascript实现滑动解锁功能
Mar 22 Javascript
微信小程序图片宽100%显示并且不变形
Jun 21 Javascript
微信小程序中时间戳和日期的相互转换问题
Jul 09 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
Nov 07 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
Jan 19 Javascript
js原生map实现的方法总结
Jan 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
用php和MySql来与ODBC数据连接
2006/10/09 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
Js面试算法详解
2018/04/08 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
python实现挑选出来100以内的质数
2015/03/24 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
python版本五子棋的实现代码
2018/12/11 Python
Python代码太长换行的实现
2019/07/05 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
Django 批量插入数据的实现方法
2020/01/12 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
个人实用的自我评价范文
2013/11/23 职场文书
银行学习十八大感想
2014/01/11 职场文书
初中考试作弊检讨书
2014/02/01 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
大学同学十年聚会感言
2014/02/21 职场文书
优秀党员推荐材料
2014/12/18 职场文书
三方协议书
2015/01/27 职场文书
公司放假通知范文
2015/04/14 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
党员读书活动心得体会
2016/01/14 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL