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中事件触发器events的使用的更多相关文章
- 初步揭秘node.js中的事件
当你学习node.js的时候,Events是一个非常重要的需要理解的事情.非常多的Node对象触发事件,你能在文档API中找到很多例子.但是关于如何写自己的事件和监听,你可能还不太清楚.如果你不了解, ...
- 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
[摘要] 官网博文翻译,nodejs中的定时器 示例代码托管在:http://www.github.com/dashnowords/blogs 原文地址:https://nodejs.org/en/d ...
- 【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
目录 Event Loop 是什么? Event Loop 基本解释 事件循环阶段概览 事件循环细节 timers pending callbacks poll阶段 check close callb ...
- node.js中的事件轮询Event Loop
任务队列/事件队列 "任务队列"是一个事件的队列,IO设备完成一项任务,就在"任务队列"中添加一个事件,表示相关的异步任务可以进入"执行栈" ...
- node.js中stream流中可读流和可写流的使用
node.js中的流 stream 是处理流式数据的抽象接口.node.js 提供了很多流对象,像http中的request和response,和 process.stdout 都是流的实例. 流可以 ...
- 理解Node.js的事件轮询
前言 总括 : 原文地址:理解Node.js的事件轮询 Node小应用:Node-sample 智者阅读群书,亦阅历人生 正文 Node.js的两个基本概念 Node.js的第一个基本概念就是I/O操 ...
- JS中事件绑定的三种方式
以下是搜集的在JS中事件绑定的三种方式. 1. HTML onclick attribute <button type="button" id="upl ...
- node.js中对 mysql 进行增删改查等操作和async,await处理
要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...
- node.js中process进程的概念和child_process子进程模块的使用
进程,你可以把它理解成一个正在运行的程序.node.js中每个应用程序都是进程类的实例对象. node.js中有一个 process 全局对象,通过它我们可以获取,运行该程序的用户,环境变量等信息. ...
随机推荐
- 【389】Implement N-grams using NLTK
Ref: Natural Language Toolkit Ref: n-grams in python, four, five, six grams? Ref: "Elegant n-gr ...
- Python基本模块介绍:sys、platform
sys模块 常用函数 sys.argv 命令行参数,实现从程序外部向程序传递参数. sys.path 模块搜索路径. sys.platform 获取当前系统平台. sys.version 获取pyth ...
- 直接在浏览器运行jsx及高版本的js代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- eclipse 关于*.properties 文件 中文显示为Unicode,无法显示中文的问题(Properties Editor)
一.以下为在线安装Properties Editor的过程1.在eclipse下 "帮助"(help)--- 2.Install New Software3.Add4.Name:P ...
- ArcGIS中的WKID(转)
ArcGIS中的WKID link: https://www.cnblogs.com/liweis/p/5951032.html 提到坐标系统,大家多少能明白一些,但在运用时,有些朋友搞得不是非常清楚 ...
- mysql游标错误
DECLARE done INTEGER DEFAULT 0;DECLARE cur CURSOR FOR SELECT f_time,f_value FROM this_yc201508;DECLA ...
- C# 中文判断
原地址忘了,也是博客园的 /// <summary> /// 是否是 中文 /// </summary> /// <param name="CString&qu ...
- JS----addEventListener()
addEventListener() 用于向指定元素添加事件. 可以向一个元素添加多次事件或者多次不同事件,后面的事件是不会覆盖前面的. 语法: element.addEventListener(ev ...
- 求前n项的斐波那契数列、求两个数的最小公倍数、求两个数的最大公约数
class Fib(object): def __call__(self,n): a=[0,1] for i in range(n-2): an ...
- Java的map键值对的用法,map的遍历,Entry对象的使用
思路: 1.定义集合 2.存储数据 3.添加元素 4.遍历 4.1将需要遍历的集合的键封装到set集合中(这用到了entrySet方法,和Entry对象) 4.2声明迭代器或者用for增强循环 4.3 ...