这篇文章将为大家详细讲解有关节点。js中使用EventEmitter处理事件的案例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
在本教程中我们学习节点。js的原生<代码> EvenEmitter> 代码类。学完后你将了解事件,怎样使用,<代码> EvenEmitter> 代码以及如何在程序中利用事件。另外还会学习<代码> EventEmitter> 代码类从其他本地模块扩展的内容,并通过一些例子了解背后的原理。
总之本文涵盖了关于<代码> EventEmitter> 代码类的所有内容。
什么是事件?
当今事件驱动的体系结构非常普遍,事件驱动的程序可以产生,检测和响应各种事件。
节点。js的核心部分是事件驱动的,有许多诸如文件系统(<代码> fs> 代码)和,<代码> 代码>流这样的模块本身都是用<代码> EventEmitter> 代码编写的。
在事件驱动的编程中,<强>事件(事件)强>是一个或多个动作的结果,这可能是用户的操作或者传感器的定时输出等。
我们可以把事件驱动程序看作是发布-订阅模型,其中发布者触发事件,订阅者侦听事件并采取相应的措施。
例如,假设有一个服务器,用户可以向其上传图片。在事件驱动的编程中,诸如上传图片之类的动作将会发出一个事件,为了利用它,该事件还会有1到n个订阅者。
在触发上传事件后,订阅者可以通过向网站的管理员发电子邮件,让他们知道用户已上传照片并对此做出反应,另一个订阅者可能会收集有关操作的信息,并将其保存在数据库中。
这些事件通常是彼此独立的,尽管它们也可能是相互依赖的。
什么是EventEmitter ?
<代码> EventEmitter> 代码类是节点。js的内置类,位于<代码> 代码>事件模块。根据文档中的描述:
大部分的节点。js核心API都是基于惯用的异步事件驱动的体系结构所实现的,在该体系结构中,某些类型的对象(称为“发射器”)发出已命名事件,这些事件会导致调用<代码> 代码>函数对象(“监听器”)”引用>这个类在某种程度上可以描述为发布-订阅模型的辅助工具的实现,因为它可以用简单的方法帮助事件发送器(发布者)发布事件(消息)给监听器(订阅者)。
创建EventEmitters
话虽如此,但还是先创建一个<代码> EventEmitter> 代码更加实在。可以通过创建类本身的实例或通过自定义类实现,然后再创建该类的实例来完成。
创建 EventEmitter 对象
先从一个简单的例子开始:创建一个<代码> EventEmitter> 代码,它每秒发出一个含有程序运行时间信息的事件。
首先从<代码> 代码>模事件块中导入<代码> EventEmitter> 代码类:
const {EventEmitter}=要求(& # 39;事件# 39;);然后创建一个<代码> EventEmitter 代码>:
const timerEventEmitter=new EventEmitter ();用这个对象发布事件非常容易:
timerEventEmitter.emit (“update");前面已经指定了事件名,并把它发布为事件。但是程序没有任何反应,因为还没有侦听器对这个事件做出反应。
先让这个事件每秒重复一次。用<代码> setInterval() 代码>,方法创建一个计时器,每秒发布一次更新<代码> 代码>事件:
让currentTime=0;//每秒触发一次更新事件 setInterval()=比;{ currentTime + +; timerEventEmitter.emit(& # 39;更新# 39;,currentTime); },1000)、<代码> EventEmitter 代码>实例用来接受事件名称和参数。把<代码> 代码>作更新为事件名,<代码> currentTime> 代码作为自程序启动以来的时间进行传递。
通过<代码>释放()代码>方法触发发射器,该方法用我们提供的信息推送事件。准备好事件发射器之后,为其订阅事件监听器:
timerEventEmitter.on(& # 39;更新# 39;,(时间)=比;{ console.log(& # 39;从发布者收到的消息:& # 39;); 控制台。日志(“程序已经运行了${时间}秒'); });通过在()<代码> 代码>方法创建侦听器,并传递事件名称来指定希望将侦听器附加到哪个事件上。在<代码> 代码>更新事件上,运行一个记录时间的方法。
<代码>()代码>函数的第二个参数是一个回调,可以接受事件发出的附加数据。
运行代码将会输出:
从发布者收到的消息: 程序已经运行了1秒 从发布者收到的消息: 程序已经运行了2秒 从发布者收到的消息: 程序已经运行了3秒 …node . js中使用EventEmitter处理事件的案例