当前位置: 首页 > article >正文

Node学习记录-events

来自:https://juejin.cn/post/7285915718666354723 和 https://nodejs.cn/api/events.html
Nodejs核心API都是采用异步事件驱动架构,在该架构中,某些类型的对象(触发器)触发命名事件,导致调用Function对象(监听器),就是通过有效的方法来监听事件的变化,并在变化时执行相应的动作。例如:当文件被打开时,fs.ReadStream触发一个事件;只要数据可供读取,‘流’就会触发一个事件
所有触发事件的对象都是EventEmitter类的实列,这些对象暴露了eventEmitter.on()函数,允许将一个或多个函数绑定到对象触发的命名事件,当EventEmitter对象触发事件时,将同步调用附加到该特定事件的所有函数,调用的监听器返回的任何值都将被忽略和丢弃

nodejs的事件模型

Nodejs事件模型采用了发布订阅模式(Publish-Subscribe Pattern, pub-sub),又叫观察者模式,它定义了一种一对多的关系,让多个订阅者同时监听某一个发布者
在这里插入图片描述
监听消息数量默认是10个

// EventEmitter 是一个允许你订阅和发布事件的类
const EventEmitter = require('events')
// 定义一个新的类继承自 EventEmitter
class MyEmitter extends EventEmitter{}
const myEmitter = new MyEmitter()
// 监听名为event的事件
myEmitter.on('event', (data)=>{
    console.log('an event occurred1!', data)
})
myEmitter.on('event', (data)=>{
    console.log('an event occurred2!', data)
})
myEmitter.on('event', (data)=>{
    console.log('an event occurred3!', data)
})
myEmitter.on('event', (data)=>{
    console.log('an event occurred4!', data)
})
myEmitter.on('event', (data)=>{
    console.log('an event occurred5!', data)
})
myEmitter.on('event', (data)=>{
    console.log('an event occurred6!', data)
})
myEmitter.on('event', (data)=>{
    console.log('an event occurred7!', data)
})
myEmitter.on('event', (data)=>{
    console.log('an event occurred8!', data)
})
myEmitter.on('event', (data)=>{
    console.log('an event occurred9!', data)
})
myEmitter.on('event', (data)=>{
    console.log('an event occurred10!', data)
})
// 调用.emit() 方法来触发 'event' 事件。一旦这个事件被触发,所有注册为该事件监听器的回调函数都会被执行。在这个例子中,触发事件会导致控制台输出 'an event occurred!'
myEmitter.emit('event','派发的值event data')//派发事件

在这里插入图片描述

myEmitter.setMaxListeners(数量)

可以通过myEmitter.setMaxListeners(数量),来解除限制

myEmitter.setMaxListeners(20)//设置最大监听器数量为20

once只监听一次

即使emit派发多次,使用once也只会监听一次

// EventEmitter 是一个允许你订阅和发布事件的类
const EventEmitter = require('events')
// 定义一个新的类继承自 EventEmitter
class MyEmitter extends EventEmitter{}
const myEmitter = new MyEmitter()
// 监听名为event的事件
myEmitter.once('event', (data) =>{
    console.log('监听一次', data)
})
myEmitter.emit('event','派发的值event data')//派发事件
myEmitter.emit('event','派发的值event data1')//派发事件

在这里插入图片描述

off取消监听

const EventEmitter = require('events')
// 定义一个新的类继承自 EventEmitter
class MyEmitter extends EventEmitter{}
const myEmitter = new EventEmitter()
const fn = (msg) => {
   console.log(msg)
}
// 监听名为event的事件
myEmitter.on('event', fn)
myEmitter.off('event', fn)//取消监听
myEmitter.emit('event','派发的值event data')//派发事件
myEmitter.emit('event','派发的值event data1')//派发事件

应用

在process中用到了events
process.once
在这里插入图片描述
process.on
在这里插入图片描述


http://www.kler.cn/a/380543.html

相关文章:

  • MyBatis通过注解配置执行SQL语句原理源码分析
  • OpenHarmony的分布式服务框架介绍与实现解析
  • 如何在自己的云服务器上部署mysql
  • 【数据库】Redis—Java 客户端
  • c++ ------语句
  • springboot463学生信息管理系统论文(论文+源码)_kaic
  • 论文阅读-用于点云分析的自组织网络
  • TDengine数据备份与恢复
  • 【云备份项目】json以及jsoncpp库的使用
  • SpringBoot新闻稿件管理系统:架构与实现
  • 【零售和消费品&存货】快递包裹条形码与二维码识别系统源码&数据集全套:改进yolo11-RFCBAMConv
  • redis7学习笔记
  • nodejs入门教程12:nodejs url模块
  • WindowsDocker安装到D盘,C盘太占用空间了。
  • 确定性信道无损耗信道无用信道对称信道
  • mysql 8.0.39 Caused by: java.sql.SQLException: Illegal mix of collations 异常解决
  • 信而泰防火墙安全测试解决方案:为网络安全保驾护航
  • leetcode-19-删除链表的倒数第N个结点
  • 【青牛科技】GC4928替代BD63006/罗姆在吸尘器行走轮、卷发器、水泵和小风扇中的应用
  • Linux之初体验
  • A016基于SpringBoot的学生网上选课系统的设计与实现
  • 跳表原理笔记
  • 【Mac】安装 VMware Fusion Pro
  • uniapp-是否删除
  • pytorch3d导入maya相机位姿踩坑
  • 优化文本嵌入,大幅提升RAG检索速度