首页 > 编程语言 >无涯教程-Node.js - 事件发送

无涯教程-Node.js - 事件发送

时间:2024-01-21 13:05:46浏览次数:30  
标签:Node eventEmitter 无涯 EventEmitter js 侦听器 connection 事件 event

Node中的许多对象都会发出事件,例如net.Server每次对等点连接到它时都会发出一个事件,而fs.readStream在文件打开时会发出一个事件。发出事件的所有对象都是events.EventEmitter的实例。

EventEmitter类

如上一节所述,EventEmitter类位于事件模块中。可通过以下代码访问-

//导入事件模块
var events=require('events');

//创建一个 eventEmitter 对象
var eventEmitter=new events.EventEmitter();

当EventEmitter遇到任何错误时,它将发出"error"事件,添加新的侦听器时,将触发" newListener"事件,而当删除侦听器时,将触发" removeListener"事件

EventEmitter提供了多个属性,如 on 和 emit ,on 属性用于将函数与事件绑定,而 emit 用于触发事件。

EventEmitter方法

Sr.No. Method & 描述
1

addListener(event,listener)

在侦听器数组的末尾为指定事件添加一个侦听器。

2

on(event,listener)

在侦听器数组的末尾为指定事件添加一个侦听器。

3

once(event,listener)

向事件添加一次侦听器,仅在下次触发事件时才调用此侦听器,然后将其删除。

4

removeListener(event,listener)

从侦听器数组中删除指定事件的侦听器。

5

removeAllListeners([event])

删除所有侦听器,或指定事件的侦听器。

6

setMaxListeners(n)

默认情况下,如果为特定事件添加了10个以上的侦听器,则EventEmitters将打印警告。设置为零表示无限。

7

listeners(event)

返回指定事件的侦听器数组。

8

emit(event,[arg1],[arg2],[...])

使用提供的参数按顺序执行每个侦听器,如果事件具有侦听器,则返回true,否则返回false。

Class 方法

Sr.No. Method & 描述
1

listenerCount( emitter,event)

返回给定事件的侦听器数。

Events 事件

Sr.No. 大事记 & 描述
1

newListener

  • event    -  事件名称

  • listener - 事件处理函数

每当添加侦听器时都会发出此事件,触发此事件后,可能尚未将侦听器添加到该事件的侦听器数组中。

2

removeListener

  • event    - 字符串事件名称

  • listener - 函数事件处理函数

每当有人删除侦听器时,都会发出此事件,触发此事件后,可能尚未从该事件的侦听器数组中删除该侦听器。

示例代码

使用以下Node.js代码创建一个名为main.js的js文件-

var events=require('events');
var eventEmitter=new events.EventEmitter();

//listener #1
var listner1=function listner1() {
   console.log('listner1 executed.');
}

//listener #2
var listner2=function listner2() {
   console.log('listner2 executed.');
}

//用listner1函数绑定连接事件
eventEmitter.addListener('connection', listner1);

//用listner2函数绑定连接事件
eventEmitter.on('connection', listner2);

var eventListeners=require('events').EventEmitter.listenerCount
   (eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

//触发连接事件
eventEmitter.emit('connection');

//移除listner1函数的绑定
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");

//触发连接事件
eventEmitter.emit('connection');

eventListeners=require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

console.log("Program Ended.");

现在运行main.js以查看输出-

$node main.js

验证输出。

2 Listner(s) listening to connection event
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.

参考链接

https://www.learnfk.com/nodejs/nodejs-event-emitter.html

标签:Node,eventEmitter,无涯,EventEmitter,js,侦听器,connection,事件,event
From: https://blog.51cto.com/u_14033984/9352625

相关文章

  • js设计模式之观察者模式
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>观察者模式</title></head><body><script>classEvent{constructor(){}//事件容器,可以是一个也可以是......
  • 无涯教程-Node.js - IO系统
    Node使用围绕标准POSIX函数的简单包装器来实现文件I/O,可以使用以下语法导入节点文件系统(fs)模块-varfs=require("fs")同步与异步fs模块中的每个方法都有同步形式和异步方式,异步方法将最后一个参数作为完成函数回调,并将回调函数的第一个参数作为错误。最好使用异步方法而不是......
  • 无涯教程-Node.js - Buffers
    纯JavaScript是Unicode友好的,但是对于二进制数据却不是,在处理TCP流或文件系统时,必须处理八位位组流,Node提供了Buffer类,该类提供了实例来存储类似于整数数组的原始数据,但对应于V8堆外部的原始内存分配。缓冲区类是全局类,可以在应用程序中访问而无需导入缓冲区模块。创建缓冲区......
  • 无涯教程-Node.js - Streams
    Stream流是使您可以连续地从源读取数据或将数据写入目标的对象,在Node.js中,有四种类型的流-Readable  - 用于读取操作的流。Writable   - 用于写操作的流。Duplex    - 可用于读取和写入操作的流。Transform -一种双工流,其中基于输入来计算输出......
  • node-red__function_1
               ......
  • 关于使用SSM+JSP开发时setter、getter隐式调用问题的小结
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/17977495出自【进步*于辰的博客】之前使用SSM+JSP做网站开发,由于没有注意setter、getter的隐式调用问题,出现了多次bug,对开发进度影响挺大。因此,特来作这篇文章跟大家分享,帮......
  • 序列化之@JsonComponent、@JsonInclude、@JsonSerialize、@JsonIgnore、JsonProperty
    前言:很多时候,例如前端需要字段user可能只是需要用到user中的userName属性,而后端传过去的却是一整个user对象,这样显然是不行的。那有没有一种技术,可以把后端传给前端的user类型的值改变为userName类型的值呢?@JsonComponent、@JsonInclude、@JsonSerialize可以在序列化的时候动手脚,可......
  • 无涯教程-MATLAB - Octave
    GNUOctave是像MATLAB这样的高级编程语言,它与MATLAB大部分兼容。它也用于数值计算。Octave与MATLAB具有以下共同特征-矩阵是基本数据类型它具有对复数的内置支持它具有内置的数学函数和库它支持用户定义的函数GNUOctave也是可免费重新发行的软件,您可以根据自由软件基金会......
  • 无涯教程-MATLAB - 变换(Transforms)
    MATLAB提供了用于处理变换的命令,例如Laplace和Fourier变换,转换在科学和工程中用作简化分析并从另一个角度查看数据的工具。例如,傅立叶变换允许我们将表示为时间函数的信号转换为频率函数,拉普拉斯变换使我们能够将微分方程转换为代数方程。MATLAB提供了laplace,傅立叶和fft命......
  • 无涯教程-MATLAB - 多项式(Polynomials)
    MATLAB将多项式表示为行向量,其中包含按降序排序的系数。例如,方程P(x)=x4+7x3-5x+9可以表示为-p=[170-59];判断多项式polyval函数用于以指定值判断多项式。例如,要判断我们先前的多项式p,在x=4处,键入-p=[170-59];polyval(p,4)MATLAB执行上述语句并返......