事件驱动events

简介: 事件驱动events

文章目录

案列代码

const events = require("events");
var emitter = new events.EventEmitter();
const listener1=function(arg1,arg2){
    console.log("listener1",arg1,arg2);
};
const listener2 = function(arg1,arg2){
    // 默认传入this指向当前监听器
    console.log("listener2",arg1,arg2,this);
}
// 注册监听器1 
const em1 = emitter.on('someEvent',listener1);
// console.log(em1);
console.log("----");
// 注册监听器2 
const em2 = emitter.on('someEvent',listener2)
// console.log(em2);
console.log("----");
// 注册事件发射器
emitter.emit('someEvent','触发器',1991,res=>{
    console.log("发射事件1");
});
console.log("发射器1完毕");
// 解除监听器1
emitter.removeListener('someEvent',listener1,res=>{
    console.log("监听器一解除");
});
emitter.emit('someEvent','触发器',1991);
emitter.on('someEvent',(arg1,arg2)=>{
    console.log("listener3",arg1,arg2);
})

输出结果

PS D:\Codes\node> node "d:\Codes\node\11、事件发射器.js"
----
----
listener1 触发器 1991
listener2 触发器 1991 EventEmitter {
  _events: [Object: null prototype] {
    someEvent: [ [Function: listener1], [Function: listener2] ]
  },
  _eventsCount: 1,
  _maxListeners: undefined,
  [Symbol(kCapture)]: false
}
发射器1完毕
listener2 触发器 1991 EventEmitter {
  _events: [Object: null prototype] { someEvent: [Function: listener2] },
  _eventsCount: 1,
  _maxListeners: undefined,
  [Symbol(kCapture)]: false
}

代码解析

  • 回调问题

// 注册事件发射器 emitter.emit('someEvent','触发器',1991,res=>{ console.log("发射事件1"); });

// 解除监听器1 emitter.removeListener('someEvent',listener1,res=>{ console.log("监听器一解除"); });

通过输出结果可以发现事件的发射器,以上两个函数的回调都没有执行,由此可知,事件的发射器跟监听器的解除过程都不会涉及到事件的回调


  • this 指针

const listener1=function(arg1,arg2){ console.log("listener1",arg1,arg2); };

const listener2 = function(arg1,arg2){ // 默认传入this指向当前监听器 console.log("listener2",arg1,arg2,this); }

输出结果:

listener1 触发器 1991 listener2 触发器 1991 EventEmitter { _events: [Object: null prototype] { someEvent: [ [Function: listener1], [Function: listener2] ] }, _eventsCount: 1, _maxListeners: undefined, [Symbol(kCapture)]: false }

通过代码与输出结果的比对,我们发现监听器会默认带有this指针,指向当前的监听器的监听事件EventEmitter对象;

对象内的someEvent就是我们监听的事件,[Function: listener1], [Function: listener2] ],就是我们定义的两个监听器


  • 代码的实现

emitter.on('someEvent',(arg1,arg2)=>{ console.log("listener3",arg1,arg2); })

// 我们发现在事件发射器后面的监听器并不能监听到前面的事件发射。

相关文章
|
SQL 前端开发 测试技术
什么是 API ?
API 即应用程序接口(API:Application Program Interface),应用程序接口是一组定义、程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信。
1986 2
|
2天前
|
云安全 监控 安全
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
875 5
|
12天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1083 41
|
9天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
650 37
|
12天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
717 61
大厂CIO独家分享:AI如何重塑开发者未来十年
|
8天前
|
存储 自然语言处理 测试技术
一行代码,让 Elasticsearch 集群瞬间雪崩——5000W 数据压测下的性能避坑全攻略
本文深入剖析 Elasticsearch 中模糊查询的三大陷阱及性能优化方案。通过5000 万级数据量下做了高压测试,用真实数据复刻事故现场,助力开发者规避“查询雪崩”,为您的业务保驾护航。
452 28
|
16天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
926 59
Meta SAM3开源:让图像分割,听懂你的话
|
5天前
|
弹性计算 网络协议 Linux
阿里云ECS云服务器详细新手购买流程步骤(图文详解)
新手怎么购买阿里云服务器ECS?今天出一期阿里云服务器ECS自定义购买流程:图文全解析,阿里云服务器ECS购买流程图解,自定义购买ECS的设置选项是最复杂的,以自定义购买云服务器ECS为例,包括付费类型、地域、网络及可用区、实例、镜像、系统盘、数据盘、公网IP、安全组及登录凭证详细设置教程:
204 114