位置: 编程技术 - 正文

详解Node.js:events事件模块(详解16型人格)

编辑:rootadmin

推荐整理分享详解Node.js:events事件模块(详解16型人格),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:详解金球奖之争,详解九章算法,详解金球奖之争,详解中国女足出线形势,详解中国女足出线形势,详解增发万亿国债细节,详解杭州亚运会会徽和口号,详解中国女足出线形势,内容如对您有帮助,希望把文章链接给更多的朋友!

Nodejs的大部分核心API都是基于异步事件驱动设计的,所有可以分发事件的对象都是EventEmitter类的实例。

大家知道,由于nodejs是单线程运行的,所以nodejs需要借助事件轮询,不断去查询事件队列中的事件消息,然后执行该事件对应的回调函数,有点类似windows的消息映射机制。至于更细的实现环节,可以另行查找资料。

下面介绍EventEmitter的使用。

1、监听事件和分发事件

EventEmitter实例可以使用on或addListener监听事件,emit()方法分发事件,如下所示:

或者使用class类

执行结果如下:

E:developmentdocumentnodejsdemo>node event-example.jsreceive the data:1

2、向事件监听回调函数传递参数

从上面的例子可以看出,emit()方法可以传递任意的参数集合给回调函数,需要注意的一点是this关键字指向的是调用emit方法的EventEmiter实例,但在箭头函数中例外,this指向的是全局this,因为箭头函数中的this是在定义时绑定。如下所示:

执行结果如下:

E:developmentdocumentnodejsdemo>node event-example.js普通回调函数中this:myEmiter {domain: null,_events: { data: [Function], data1: [Function] },_eventsCount: 2,_maxListeners: undefined }箭头回调函数中this:{}

这里讲到箭头函数中的this,就顺便说一下,为什么箭头函数能够实现定义时绑定this,就是因为箭头函数内部根本就没有绑定this的机制,它使用的是外层作用域的this,因此它也不能作为构造函数。

3、事件监听程序的执行顺序

EventEmiter实例可以绑定多个事件,当我们顺序触发这些事件时,EventEmiter会以同步模式执行,既第一个事件处理函数没有完成,便不会触发下一个事件,如下所示:

执行结果如下:

E:developmentdocumentnodejsdemo>node event-example.jsdata事件执行了: .msdata1事件开始执行...

当然我们可以在回调函数中使用异步操作,例如setTimeout,setImmediate或者process.nextTick()等,从而实现异步的效果,如下所示:

执行结果如下:

E:developmentdocumentnodejsdemo>node event-example.jsdata1事件执行了...data事件执行了...

详解Node.js:events事件模块(详解16型人格)

4、一次性事件监听

EventEmiter可以使用once监听某个事件,则该事件处理程序只会触发一次,之后emit该事件都会被忽略,因为监听程序被注销了,如下所示:

执行结果如下:

E:developmentdocumentnodejsdemo>node event-example.jsthis is first call!

从上面的结果看出,'one'事件只执行了一次。

5、移除事件绑定

类似DOM事件监听,EventEmiter也可以移除事件绑定,利用removeListener(eventName,listener)方法解除某个事件的绑定,因此回调函数listener必须是命名函数,要不然找不到该函数,因为函数是引用型类型,就算函数体是一样,也不是同一个函数,如下所示:

执行结果如下:

E:developmentdocumentnodejsdemo>node event-example.jshello data!E:developmentdocumentnodejsdemo>

从执行结果可以看出,data事件使用的是匿名函数,因此没有被移除掉,而data1事件则成功解除绑定了。这里需要注意一点的是emit触发某个事件后,所有跟该事件绑定的回调函数都会被调用,即使你在某个回调函数中使用removeListener函数移除掉另一个回调也没有用,但是随后的事件队列是移除了该回调的。如下所示:

另外可以使用removeAllListeners()解除所有事件的绑定。

6、获取事件监听数量和监听函数

使用emitter.listenerCount(eventName)函数获取指定事件的监听数量,函数emitter.listeners(eventName)则可以用来获取指定事件的所有监听函数,使用如下所示:

执行结果如下:

E:developmentdocumentnodejsdemo>node event-example.jsemitter实例的data事件绑定了2个回调函数它们是: [ [Function: cbA], [Function: cbB] ]

7、获取和设置emitter的最大监听数量nodejs对同一事件的监听数量建议不宜超过个,这个可以查看EventEmitter.defaultMaxListeners属性便可得知,如下所示:

emitter通过getMaxListeners()方法获取最大监听数量以及setMaxListeners(n)方法设置最大监听数量,如下所示:

执行结果如下:

E:developmentdocumentnodejsdemo>node event-example.jsemitter的事件最大监听数是:1(node:) Warning: Possible EventEmitter memory leak detected. 2 data listeners added. Use emitter.setMaxListeners() to increase limit

如上结果所示,如果设置了最大监听数量,则同一事件的监听最好不要超过该最大值,否则很可能发送内存泄漏。

events模块便介绍到这。希望对大家的学习有所帮助,也希望大家多多支持积木网。

使用node.js中的Buffer类处理二进制数据的方法 前言在Node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。这篇文章就详细介绍了node.js中的Buffer类处理二进制数据的方法,

node.js中的事件处理机制详解 EventEmitter类在Node.js的用于实现各种事件处理的event模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个集成了EventEmitter类的子类的实例

基于Node.js + WebSocket打造即时聊天程序嗨聊 前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术。像node.js这样的后端开拓者直接将前端人员

标签: 详解16型人格

本文链接地址:https://www.jiuchutong.com/biancheng/374098.html 转载请保留说明!

上一篇:node.js版本管理工具n无效的原理和解决方法(node.js最新版)

下一篇:使用node.js中的Buffer类处理二进制数据的方法(node.js使用教程)

  • 小规模纳税人收到专票可以抵扣吗
  • 工会经费按什么比例交
  • 企业的进项税额怎么算
  • 应纳税暂时性差异是调增还是调减
  • 对本次疫情有什么看法
  • 法人工资怎么发最划算
  • 没有车加油费可以入账吗
  • 个人缴纳印花税减半吗?
  • 公司出售固定资产
  • 应税消费品的税目有哪些
  • 房产税原值是否包括土地
  • 上缴财政收入怎么做账
  • 法定盈余公积金的提取比例一般按照()
  • 哪些合同不需要缴纳印花税的通知
  • 已认证抵扣的发票如何红字信息表
  • 多缴纳的税款不退税怎么入账
  • 材料含税价怎么算
  • 商砼税收政策
  • 关于油票的纳税人识别号
  • 小规模纳税人自开专票
  • 滴滴行程单修改后是否能查
  • 进口应税消费品所支付的金额不包括
  • 帮其他公司垫付的钱怎么写分录
  • 长期未收回的应收账款企业所得税
  • 纳税单位与免税单位共用的房屋由纳税单位全额纳税
  • 非贸易企业代扣代缴增值税和附加税如何做账?
  • 工会经费什么时候申报缴纳
  • 三栏式明细账目录填写范本
  • 小企业会计准则下融资租入固定资产的核算
  • 键盘剪切板怎么打开
  • 日记账登记错了怎么办
  • uniapp vuecli
  • 企业自查补税怎么报税
  • 收到银行开的手续费发票怎么做分录
  • jquery 元素
  • 秸秆回收加工项目
  • 应收账款红冲什么意思
  • 企业注销需要清产核资吗
  • 将房产以股权形式出售
  • 资产负债表固定资产清理
  • 不开增值税发票的销售收入报税操作流程是?
  • mysql的日期时间函数
  • 固定资产一次性扣除怎么做账
  • 印花税每月未计提怎么办
  • 技术员差旅费计入哪个会计科目
  • 招待客户住宿属于什么费用
  • 现金流量比率是什么意思
  • 固定总价合同与epc总承包合同区别
  • 车辆保险费计入现金流量表哪里
  • 账户分类的作用是什么
  • 确定固定资产的标准
  • 土地出让合同的签订主体
  • 网上充值平台不能提现怎么办
  • 企业无形资产入账标准
  • sqlserver增删改查执行语句
  • mysql 左链接 右链接
  • sqlsever导入数据时出现ole db连接数据无效
  • windows优化软件哪个好
  • ubuntu20.04怎么用
  • ipad和iPhone的mac地址区别
  • 系统如何修改
  • 电脑硬件用途
  • unetbootin教程
  • win10系统休眠唤醒屏幕变大怎么办
  • npscheck.exe - npscheck是什么进程 有什么用
  • win8 系统设置
  • qq仿ios
  • 如何使用maven
  • css样式表可以兼容所有浏览器吗
  • cd弹出错误怎么回事
  • js获取当前日期并格式化
  • 原生js实现promise
  • android主流分辨率
  • jQuery simplePage+AJAX plus分页插件用法实例
  • 安卓样式大全
  • 安卓开源组件
  • 淘宝模拟生成器
  • 杭州市税务局总局地址
  • 安徽省税务局发票真伪查询平台
  • 增值税发票选择确认平台已勾选未确认的发票怎么撤销?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设