nodejs中的事件events

NodeJS中的Events(事件触发器) 对于该模块我们能做的不仅仅是简单的使用还可以在该模块的基础上做出扩展,你想想JS中的onclick、onmousemove。因为事件的概念较为抽象,所以我们大部开发者并不是很喜欢使用Events模块实现监听,更多的时候我们可能更加喜欢以回调函数的方式的完成对某个函数或者方法的监听。这种做法实际上就是在对待页面中的DOM对象添加事件监听,在Node.js中是无法直接为一个对象添加事件监听的,因为我们自定义的类或者对象都是没有实现或继承。是非常核心的模块,大部分的核心模块基本上都有用到或者继承了该模块。 阅读详情

1.Events

例子,一个绑定了一个监听器的 EventEmitter 实例。 eventEmitter.on() 方法用于注册监听器,eventEmitter.emit() 方法用于触发事件。

const EventEmitter  = require('events');

class MyEmitter extends EventEmitter {}

const myEimitter = new MyEmitter;
myEimitter.on('event', () => {
    console.log("触发了一个事件!")
});
myEimitter.emit('event');

2.给监听器传入参数与 this

eventEmitter.emit() 方法允许将任意参数传给监听器函数。 当一个普通的监听器函数被 EventEmitter 调用时,标准的 this 关键词会被设置指向监听器所附加的 EventEmitter。

const EventEmitter = require('events')
class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', function (a, b) {
    console.log(a, b, this);

});
myEmitter.emit('event', 'a', 'b');
// Prints:
//   a b MyEmitter {
//     domain: null,
//     _events: { event: [Function] },
//     _eventsCount: 1,
//     _maxListeners: undefined }

可以使用 ES6 的箭头函数作为监听器。但是这样 this 关键词就不再指向 EventEmitter 实例:

const EventEmitter = require('events')
class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', (a, b) =>{
    console.log(a, b, this);

});
myEmitter.emit('event', 'a', 'b');
// Print: a b {}

3.只处理事件一次

当使用 eventEmitter.on() 方法注册监听器时,监听器会在每次触发命名事件时被调用。 也可以使用 ES6 的箭头函数作为监听器。但是这样 this 关键词就不再指向 EventEmitter 实例:

const EventEmitter = require('events')
class MyEmitter extends EventEmitter {}

const  myEmitter = new MyEmitter();
let m = 0;
myEmitter.on('event', () => {
    console.log(++m);
});
myEmitter.emit('event');
// Prints: 1
myEmitter.emit('event');
// Prints: 2

使用这个eventEmitter.once()方法,可以注册一个最多被调用一次的特定事件的监听器。一旦事件发出,监听器就被取消注册,然后被调用。

const EventEmitter = require('events')
class MyEmitter extends EventEmitter {}

const  myEmitter = new MyEmitter();
let m = 0;
myEmitter.once('event', () => {
    console.log(++m);
});
myEmitter.emit('event');
// Prints: 1
myEmitter.emit('event');
// Ignored

4.错误事件

使用这个eventEmitter.once()方法,可以注册一个最多被调用一次的特定事件的监听器。一旦事件发出,监听器就被取消注册,然后被调用。

const EventEmitter = require('events')
class MyEmitter extends EventEmitter {}

const  myEmitter = new MyEmitter();
myEmitter.on('error', (error) => {
    console.log('whoops! There was an error.')
});
myEmitter.emit('error' , new Error('whoops!'));

5.事件newlistener

该EventEmitter实例将发出它自己的’newListener’事件之前 的侦听器添加到其内部的监听者数组。
注册了’newListener’事件的监听器将被传递事件名称和引用被添加的监听器。

const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// Only do this once so we don't loop forever
myEmitter.once('newListener', (event, listener) => {
    if (event === 'event') {
        //嵌入一个新的监听器
        myEmitter.on('event', () => {
            console.log('B');
        });
    }
});
myEmitter.on('event', () => {
    console.log('A');
});
myEmitter.emit('event');
// Prints:
//   B
//   A

6.listenerCount

一个类方法,返回给定eventName 注册给定的给定的监听器的数量emitter。

const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(EventEmitter.listenerCount(myEmitter, 'event'));
// Print: 3

7.emitter.eventNames()

一个类方法,返回给定eventName 注册给定的给定的监听器的数量emitter。

const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(EventEmitter.listenerCount(myEmitter, 'event'));
// Print: 3

8.emitter.listeners(eventName)

返回名为的事件的侦听器数组的副本eventName。

const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
server.on('connection', (stream) => {
    console.log('Someone connected!');
});
console.log(util.inspect(server.listeners('connection')));

9.emitter.on(eventName,listener)

默认情况下,事件侦听器按照它们添加的顺序被调用。该 emitter.prependListener()方法可以用作将侦听器添加到侦听器数组开头的替代方法。

const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEE = new MyEmitter();
myEE.on('foo', () => { console.log('a') });
myEE.prependListener('foo', () => { console.log('b') });
myEE.emit('foo');
// Print: B
// Print: A

10.emitter.removeListener(eventName,listener)

removeListener将从监听器数组中最多删除一个监听器实例。如果任何单个侦听器已多次添加到指定的侦听器数组中eventName,则removeListener必须多次调用以删除每个实例。

const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter  = new MyEmitter();

const callbackA = () => {
    console.log('A');
    myEmitter.removeListener('event', callbackB)
};

const callbackB = () => {
    console.log('B');
};

myEmitter.on('event', callbackA);

myEmitter.on('event', callbackB);

// callbackA removes listener callbackB but it will still be called
// Internal listener array at time of emit [callbackA, callbackB]
myEmitter.emit('event');
// Print: A
// Print: B

// callbackB is now removed
// Internal listener array [callbackA]
myEmitter.emit('event');
// Print: A
node.js中的events.emitter.listeners方法使用说明 主要介绍了node.js中的events.emitter.listeners方法使用说明,本文介绍了events.emitter.listeners 的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下 立即下载

相关推荐

MIUI升级后录音神秘消失?别慌!手把手教你从Android/data目录找回宝贵录音文件

本文详细解析了MIUI升级后录音文件消失的原因,并提供了从Android/data目录找回录音文件的实用指南。通过技术分析和步骤演示,帮助小米手机用户解决录音文件丢失问题,同时分享预防措施和高级恢复方案,确保重要录音数据安全。

weixin_30696427的博客 281

实现EventEmitter 订阅监听模式

写一个EventEmitter,实现on(监听事件)、emit(触发事件)、off(清除监听事件)、once(为事件注册单次监听器)以上功能: class EventEmitter { constructor() { // events是一个对象,key对相应的是event,value对应的是函数的数组 this.events = {}; } // 监听event事件,触发时调用callback函数

qq_30136729的博客 679

MPU6050模块DIY翻车实录:ID能读但数据全为零?原来是这个10uF电容惹的祸

本文详细记录了MPU6050模块调试过程中遇到的ID能读但数据全为零的问题排查过程。通过对比不同参考设计,发现CPOUT引脚10uF电容选择不当是导致数据异常的根源,更换为官方推荐的2.2nF电容后问题解决。文章为硬件开发者提供了宝贵的电路设计经验。

weixin_29158047的博客 319

Nodejs模块当中的事件(events)

因为在node当中的大部分功能模块都依赖了events,所以events模块是Nodejs当中非常重要的模块之一。events对外暴露的是一个class即EventEmitter。EventEmitter的作用有两个,分别是对事件的监听与发射。 1、实现on和emit 自定义一个方法,输出的内容为“我很帅”。通过event当中的on与emit来实现对事件的监听与发射。 //引...

张培跃的个人博客 2325

【UE5.3 Cesium for Unreal】GlobePawn编译实战:从源码修改到功能实现

本文详细介绍了在UE5.3中为Cesium for Unreal插件编译和集成非官方增强组件GlobePawn的完整实战流程。从获取源码、准备资产文件、部署项目结构,到逐行修改代码适配工程并解决典型编译错误,最终实现在三维地球上实现类似Google Earth的丝滑鼠标交互体验。

weixin_29011667的博客 311

optee技术简介

OP-TEE(Open Portable Trusted Execution Environment)是一种开源的可信执行环境(TEE),专为ARM TrustZone架构设计。TEE是一种独立的执行环境,运行在主操作系统之外,为敏感任务提供安全的计算空间,如加密、身份验证、密钥管理等。

baron-周贺贺-代码改变世界ctw 1279

nodejs事件模块events

前言 events模块为提供了 EventEmitter 类,这是在 Node.js 中处理事件的关键 基本引入和使用 const EventEmitter = require('events') //引入 const myEmitter= new EventEmitter() //创建EventEmitter 对象 //注册事件 eventsName myEmitter.on('eventsName',fn) //相当于emitter.addListener() //注册一次性事件 myEmit

qq_39438801的博客 471

【RT-DETR涨点改进】独家Conv改进篇 | 来自TIP 2024顶刊| 引入 DEConv细节增强卷积模块, 能够恢复更多细节信息,提升小目标检测精度、含多种不同模型改进点

本文提出了一种细节增强卷积(DEConv)模块,通过融合多种差异卷积(CDC、ADC、HDC、VDC)来增强图像特征表示能力,特别在边缘和纹理细节提取方面表现突出。该模块采用重参数化技术,在不增加计算成本的情况下,将先验信息融入常规卷积层,显著提升了RT-DETR模型在模糊或遮挡场景下的目标检测精度。实验验证了DEConv在多种骨干网络(ResNet18/50、HGNet等)中的有效性,为实时目标检测系统提供了轻量高效的改进方案。

Ai缝合怪、助力小伙伴高效发论文 453

Node 中的 events.EventEmitter 模块

http://imweb.io/topic/5973722452e1c21811630609 // 中文api http://nodejs.cn/api/stream.html#stream_readable_pipe_destination_options   // 关于 stream.pipe 你需要知道更多 http://blog.kankanan.com/article/5173...

liangxw1的专栏 1324

2026.1.9:最新VSCode集成claude插件完美解决方案,跳过登录界面,使用国内Kimi K2进行计费

本文介绍了如何安装配置Claude插件并连接Kimi K2 API的详细步骤:1)搜索安装Claude插件;2)进入设置关闭登录提示;3)在settings.json中添加API配置,包括ANTHROPIC_AUTH_TOKEN(需替换为Kimi API Key)和ANTHROPIC_BASE_URL;4)通过Kimi官网获取API Key。完成配置后即可正常使用该插件。文中配有完整的操作截图指引。

拥抱具身智能,昇腾Ascend C 8727

SolidWorks速成教程P3-5【零件 | 第五节】——异形孔向导&线性阵列&镜像

这节介绍异形孔向导、线性阵列、镜像。

嵌入式阿齐Archie 6077

node.js模块之events

Email:longsu2010 at yeah dot net  events是node的最核心模块,没有之一。 先来个例子: var events = require("events"); var emitter = new events.EventEmitter(); emitter.on("dataReady", function(data){ // 绑定事件回调函数

小姜哥的技术博客 2073

【Proteus仿真】51单片机+DAC0832+数码管制作0-25V电压可调

【Proteus仿真】51单片机+DAC0832+数码管制作0-25V电压可调

perseverance51博客 2118

nodejs的events事件

1.events的使用 const EventEmitter = require("events"); const util = require("util"); // const event = new EventEmitter(); //这是直接实例化events function Man() {} util.inherits(Man, EventEmitter); // 实现原型的继承 const event = new Man(); // 区别到具体的类,实例化类 event.o

litter_lj的博客 397

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

nodejs - 内置模块events:事件驱动编程

Node.js的events模块提供了事件驱动编程的核心功能,通过EventEmitter类实现事件的发布/订阅机制。主要功能包括:使用on()注册事件监听器,emit()触发事件,once()注册一次性监听器,以及removeListener()移除监听器等。该模块支持异步事件处理,遵循非阻塞模型,并能通过error事件处理异常。示例展示了如何创建自定义事件和模拟按钮点击,体现了事件驱动编程在Node.js中的广泛应用。

尽日寻春不见春,芒鞋踏遍陇头云。归来笑拈梅花嗅,春在枝头已十分。 953

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

nodejs的events模块循环事件

nodejs使用事件驱动模型,当服务器接受到了请求之后,就会关闭这个请求,然后再处理,为的是等待下一个请求。这样,请求就不会被耽搁。这个模型的效率非常高,因为他一直在接受请求,而没有等待任何读写操作。在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数: 在node中我们常常使用events模块来实现,即首先引入events,然后创建一个对象,利用这个对象的on方法绑定时间,然...

weixin_44311876的博客 325

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Nodejs—events事件模块入门(图文)

Nodejs—events事件模块入门 概念:nodejs使用事件驱动,events事件模块就是帮助nodejs来处理事件,对事件进行监听 绑定触发events事件 // 引入events模块 const events = require('events'); // 创建一个eventEmitter对象 const eventEmitter = new events.EventEmitter(...

Poppy_LYT的博客 655

详解NodeJS中的Events(事件触发器)

这种做法实际上就是在对待页面中的DOM对象添加事件监听,在Node.js中是无法直接为一个对象添加事件监听的,因为我们自定义的类或者对象都是没有实现或继承 Events 模块的。所以我们对 Events 模块的学习其实并不仅仅是为了将来能在开发中为自定义类添加事件,更多的其实为了对 Node.js 的知识点整体架构有一定的了解,了解知识点的来龙去脉。因为事件的概念较为抽象,所以我们大部开发者并不是很喜欢使用Events模块实现监听,更多的时候我们可能更加喜欢以回调函数的方式的完成对某个函数或者方法的监听。.

sdasadasds的博客 522

38 Nodejs 事件处理 events

events.EventEmitter 基本语法 emitter.addListener(event, listener) //添加监听 emitter.on(event, listener) //添加监听 emitter.once(event, listener) //一次性监听器,利于节省资源 //addListener / on / once 用法相当 emitter.removeList...

weixin_44406595的博客 241

nodejs 事件触发器 events模块

----events 大多数nodejs核心API构建于惯用的异步事件驱动架构,其中某些类型的对象(触发器 Emitter)会触发命名事件来调用函数(监听器 Listener) 所有能触发事件的对象都是EventEmitter类的实例;当EventEmitter对象触发一个事件时,所有绑定在该事件上的函数都会被同步的调用;被调用的监听器返回的任何值都将会被忽略并丢弃 const EventEmitter = require('events'); const eventEmitter = new E.

amuist_ting的博客 332

nodejs 事件模块events使用

Node.js 是单进程单线程应用程序,因为 V8 引擎提供的异步执行回调接口,这些接口可以处理大量的并发,所以性能很高。 API几乎都支持回调函数。 基本上所有的事件机制是用设计模式中观察者模式实现。 单线程类似进入一个while(true)的事件循环,直到没有事件观察者时退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数. //引入 events事件模块 var events = require('events') //引入 util是一个Node.js核心模块,提供常用.

xuhang139的博客 293

bootstraptable append 没有events事件_和你讲一件NodeJS中的Events(事件触发器)

在 Node.js 中,Event是非常核心的模块,大部分的核心模块基本上都有用到或者继承了该模块。 Event模块和我们之前在Javascript中学习的EventTarget接口很类似。对于该模块我们能做的不仅仅是简单的使用还可以在该模块的基础上做出扩展,你想想JS中的onclick、onmousemove不啰嗦,直接上代码!因为事件模块属于比较抽象的东西,所以不太适合用大篇幅的语言来描述它,...

weixin_39963080的博客 85

Nodejs教程-长篇>(七)事件(Events)

文章目录Node.js的Events事件模块EventEmitter Object Node.js的Events 每个在计算机上的活动都是一个事件,当一个连接被建立或者文件打开都可以称之为一个事件 Node.js的对象可以触发事件,比如使用readStream对象正在打开或者关闭一个文件的时候会触发事件 var fs = require('fs'); var rs = fs.createReadStream('./file.txt'); rs.on('open',function(){ console

数据库爆破专家的博客 467

nodeJS - 3 - Events事件

Events 事件模块说明 大多数 Node.js 核心 API 都采用异步事件驱动架构,其中某些类型的对象(触发器)会周期性的触发命名事件来调用函数对象(监听器),所有能触发事件的对象都是 EventEmitter 类的实例,允许将一个或者多个函数绑定到会被对象触发的命名事件上 EventEmitter 会按照监听器函数的注册顺序同步的调用所有监听器,所以需要确保事件的正确排序且避免

mjzhang1993的博客 472

NodeJs——(5)与 events 事件模块

①events模块只提供了一个对象,events.EventEmitter 他的核心是 事件发射 和 事件监听 功能   每个事件由一个事件名(用于标识事件),和多个参数组成。   事件名:字符串,通常表达一定的语义;   事件被发射时,监听该事件的函数被依次调用。     ②调用模块: var events = require("events"); var emitter

qq20004604的博客 1028
上一篇: 全局对象和全局变量
下一篇: JavaScript内存管理
Run4Freedom
博客等级 码龄10年 58粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值