我的编程空间,编程开发者的网络收藏夹
学习永远不晚

node.js中的事件处理机制详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

node.js中的事件处理机制详解

EventEmitter类

在Node.js的用于实现各种事件处理的event模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个集成了EventEmitter类的子类的实例对象,在Node.js中,为EventEmitter类定义了许多方法,所有与对象的事件处理函数的绑定及解除相关的处理均依靠这些方法的调用来执行。

EventEmitter类的各种方法

event:代表事件名

listener:代表事件处理函数

中括号内的参数代表该参数为可选参数

方法名与参数 描述
addListener(event,listener) 对指定事件绑定事件处理函数 on(event, listener) 对指定事件绑定事件处理函数(addListener方法的别名) once(event, listener) 对指定事件指定只执行一次的事件处理函数 removeListener(event, listener) 对指定事件接触事件处理函数 setMaxListeners(n) 指定事件处理函数的最大数量,n为正数值,代表最大的可指定事件处理函数的数量 listeners(event) 获取指定事件的所有事件处理函数 emit(event, [arg1], [arg2], [...]) 手工触发指定事件

EventEmitter类的on方法


var http = require("http");
var server = http.createServer();
server.on("request", function(req, res){ 
 console.log(req.url); 
 res.end();
});
server.listen(1337, "127.0.0.1");

在这段代码中,我们指定当服务器接收到客户端请求时,在你控制台窗口中输出客户端请求的目标的URL地址,并使用响应对象的end方法立即结束响应。

执行代码,然后在浏览器窗口中输入:http://localhost:1337://,控制台输出如下:

查看图片
控制台输出

当然,也可以通过多个on方法的执行来对同一个事件绑定多个事件处理函数。如下:


var http = require("http");
var server = http.createServer();

server.on('request', function(req, res){ 
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){ 
 console.log('处理客户端请求') 
 console.log(req.url); 
 res.end();
})

server.on('request', function(req, res){
 console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

OK,执行代码,控制台输出如下:

查看图片
控制台输出

另外,在默认情况下,针对同一个指定事件,最多可以绑定10个时间处理函数。可以通过setMaxListeners方法修改最多可以绑定的事件处理函数数量,方法如下:


emitter.setMaxListeners(n)

EventEmitter类的once方法

EventEmiiter类的once方法与on方法类似,作用均为对指定事件绑定事件处理函数,区别在于,当事件处理函数执行一次后立即被接触,即该事件处理函数只会被执行一次。once方法所用参数与on方法所用参数相同,如下:


emitter.once(event, listener)

做个试验。

还是执行如下代码(同上):


var http = require("http");
var server = http.createServer();

server.on('request', function(req, res){ 
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){ 
 console.log('处理客户端请求') 
 console.log(req.url); 
 res.end();
})

server.on('request', function(req, res){
 console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

然后,在浏览器窗口中连续打开两次127.0.0.1:1337,控制台输出如下:

查看图片
显示了两次

然后将on事件修改为once事件,代码如下:


var http = require("http");
var server = http.createServer();

server.once('request', function(req, res){ 
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){ 
 console.log('处理客户端请求') 
 console.log(req.url); 
 res.end();
})

server.once('request', function(req, res){
 console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

控制台输出如下:

查看图片
请求处理2次,其余只打印1次!

使用removeListener方法取消事件处理函数

代码如下:


var http = require("http");
var server = http.createServer();
var testFunction = function (req,res) {
 console.log('发送响应完毕')
}

server.on('request', function(req, res){
 console.log('接收到客户端请求')
})

server.on("request", function(req, res){
 console.log('处理客户端请求')
 console.log(req.url);
 res.end();
})

server.on('request', testFunction)
//删除
server.removeListener('request', testFunction)
server.listen(1337, "127.0.0.1");

运行代码,在浏览器窗口输入127.0.0.1:1337,控制台输出如下

查看图片
控制台输出

emit方法:自定义事件并将其触发

代码如下:


var http = require("http");
var server = http.createServer();

server.on("request", function(req, res){
 console.log(req.url);
});

//自定义事件
server.on("customEvent", function(arg1, arg2, arg3){
 console.log("自定义事件被触发");
 console.log(arg1);
 console.log(arg2);
 console.log(arg3);
});

//触发自定义事件
server.emit('customEvent', '自定义参数1', '自定义参数2', '自定义参数3')
server.listen(1337, "127.0.0.1");

这次不在浏览器窗口中输入地址,直接运行代码查看控制台输出,控制台输出如下:

查看图片
控制台输出

说明我们手动触发了自定义事件,也就是customEvent。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用node.js能有所帮助,如果有疑问大家可以留言交流。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

node.js中的事件处理机制详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

node.js中的事件处理机制详解

EventEmitter类 在Node.js的用于实现各种事件处理的event模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个集成了EventEmitter类的子类的实例对象,在Node.js中,为EventEm
2022-06-04

详解Node.js中的事件机制

前言 在前端编程中,事件的应用十分广泛,DOM上的各种事件。在Ajax大规模应用之后,异步请求更得到广泛的认同,而Ajax亦是基于事件机制的。 通常js给我们的第一印象就是运行在客户端浏览器上面的脚本,通过node.js我们可以在服务端运行
2022-06-04

详解Android的两种事件处理机制

UI编程通常都会伴随事件处理,Android也不例外,它提供了两种方式的事件处理:基于回调的事件处理和基于监听器的事件处理。 对于基于监听器的事件处理而言,主要就是为Android界面组件绑定特定的事件监听器;对于基于回调的事件处理而言,主
2022-06-06

理解 Node.js 事件驱动机制的原理

学习 Node.js 一定要理解的内容之一,文中主要涉及到了 EventEmitter 的使用和一些异步情况的处理,比较偏基础,值得一读。大多数 Node.js 对象都依赖了 EventEmitter 模块来监听和响应事件,比如我们常用的
2022-06-04

layui table事件监听与处理机制详解(解析layui table的事件监听和处理机制)

layuitable事件监听机制提供了丰富的事件类型和处理机制,允许开发者响应表格操作和数据交互。事件监听器通过HTML属性或JavaScriptAPI注册,触发事件时会调用对应的处理函数并填充相关数据。开发者可根据需要执行自定义逻辑,并返回布尔值控制后续操作。layuitable的事件监听功能助力开发者扩展表格功能,增强交互性,满足多样化业务需求。
layui table事件监听与处理机制详解(解析layui table的事件监听和处理机制)
2024-04-02

面试官:说说对 Node.js 中的事件循环机制理解?

在浏览器事件循环中,我们了解到javascript在浏览器中的事件循环机制,其是根据HTML5定义的规范来实现

node.js中watch机制详解

几乎所有构建系统都选择使用watch机制来解决开发过程中需要反复生成构建后文件的问题,但在watch机制下,长期以来我们必须忍受修改完代码,保存完代码必须喝口茶才能刷新看看效果的问题。在这里我们尝试探讨为什么watch不是银弹,并尝试寻找一
2022-06-04

Spring容器启动过程中发布的核心事件及事件处理机制详解

到Spring 4.2为止,事件基础设施得到了显著改进,提供了基于注释的模型以及发布任意事件的能力(也就是说,不一定是从ApplicationEvent扩展的对象)。当这样的对象被发布时,我们将它包装在一个事件中。

Node.js Serverless 中的事件处理:深入了解 EventEmitter

本文将深入探讨 Node.js Serverless 中的事件处理,重点介绍 EventEmitter 的使用及其优势,并通过演示代码展示如何利用 EventEmitter 实现事件处理。
Node.js Serverless 中的事件处理:深入了解 EventEmitter
2024-02-21

Delphi中的事件处理机制是什么

Delphi中的事件处理机制是一种基于观察者模式的设计模式,通过事件来实现对象之间的松耦合通信。在Delphi中,事件是一种特殊类型的方法,当事件发生时,会触发绑定到该事件的处理程序。在Delphi中,可以通过声明事件类型、定义事件处理程
Delphi中的事件处理机制是什么
2024-03-13

PHP数据库连接中的事务处理机制详解

php 中的事务处理机制旨在确保数据库操作的完整性,它允许一组操作要么全部执行,要么都不执行。实现方式包括开启事务、执行操作,以及根据情况提交或回滚事务。通过使用事务处理,可以确保数据库在更新过程中始终保持一致。PHP 数据库连接中的事务处
PHP数据库连接中的事务处理机制详解
2024-05-21

理解 Node.js 中的事件循环

事件循环是 Node.js 的基本组成部分,通过确保主线程不被阻塞来实现异步编程。了解事件循环的工作原理可能具有挑战性,但对于构建高效应用程序至关重要。

Node.js中事件循环的机制是什么

本篇内容介绍了“Node.js中事件循环的机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!先看一个demo:setTimeout((
2023-06-17

编程热搜

目录