如何在Node中处理自定义事件
如果您在浏览器中使用JavaScript,您将知道通过事件处理了用户多少交互:鼠标单击,键盘按钮按下,对鼠标移动做出反应,等等。
在后端,Node为我们提供了使用以下选项构建类似系统的选项:events
模块。
特别是,此模块提供了EventEmitter
类,我们将使用它来处理事件。
您可以使用以下语法初始化EventEmitter对象:
const EventEmitter = require('events')
const eventEmitter = new EventEmitter()
除其他外,该对象还暴露了on
和emit
方法。
emit
用于触发事件on
用于添加将在事件触发时执行的回调函数
发射并监听事件
例如,让我们创建一个start
事件,并提供一个示例,我们只需登录控制台即可对此做出反应:
eventEmitter.on('start', () => {
console.log('started')
})
当我们跑步
eventEmitter.emit('start')
事件处理函数被触发,我们得到控制台日志。
addListener()
是的别名on()
,以防您看到使用过的内容。
将参数传递给事件
您可以将参数作为附加参数传递给事件处理程序,以将其传递给事件处理程序。emit()
:
eventEmitter.on('start', (number) => {
console.log(`started ${number}`)
})
eventEmitter.emit(‘start’, 23)
多个参数:
eventEmitter.on('start', (start, end) => {
console.log(`started from ${start} to ${end}`)
})
eventEmitter.emit(‘start’, 1, 100)
听一次活动
EventEmitter对象还公开了once()
方法,可用于创建一次性事件侦听器。
触发该事件后,侦听器将停止侦听。
例子:
eventEmitter.once('start', () => {
console.log(`started!`)
})
eventEmitter.emit(‘start’)
eventEmitter.emit(‘start’) //not going to fire
删除事件监听器
创建事件监听器后,您可以使用removeListener()
方法。
为此,我们必须首先具有对的回调函数的引用on
。
在此示例中:
eventEmitter.on('start', () => {
console.log('started')
})
提取回调:
const callback = () => {
console.log('started')
}
eventEmitter.on(‘start’, callback)
这样以后您可以打电话
eventEmitter.removeListener('start', callback)
您还可以使用以下方法一次删除一个事件中的所有侦听器:
eventEmitter.removeAllListeners('start')
登记事件
这eventNames()
在EventEmitter对象实例上调用的方法,返回一个字符串数组,这些字符串表示在当前EventListener上注册的事件:
const EventEmitter = require('events')
const eventEmitter = new EventEmitter()
eventEmitter.on(‘start’, () => {
console.log(‘started’)
})
eventEmitter.eventNames() // [ ‘start’ ]
listenerCount()
返回作为参数传递的事件的侦听器计数:
eventEmitter.listenerCount('start') //1
在其他听众之前/之后添加更多听众
如果您有多个侦听器,则它们的顺序可能很重要。
EventEmitter对象实例提供了一些处理订单的方法。
emitter.prependListener()
当您使用添加监听器时on
或者addListener
,它被添加到侦听器队列的末尾,并被称为末尾。使用prependListener
它是在其他侦听器之前添加和调用的。
emitter.prependOnceListener()
当您使用添加监听器时once
,它被添加到侦听器队列的末尾,并被称为末尾。使用prependOnceListener
它是在其他侦听器之前添加和调用的。
免费下载我的Node.js手册
更多节点教程:
- npm软件包管理器简介
- Node.js简介
- 使用Axios的HTTP请求
- 在哪里托管Node.js应用
- 使用Node.js与Google Analytics(分析)API进行交互
- npx节点包运行器
- package.json指南
- npm在哪里安装软件包?
- 如何更新Node.js
- 如何使用或执行使用npm安装的软件包
- package-lock.json文件
- 使用npm的语义版本控制
- 您是否应该将node_modules文件夹提交到Git?
- 将所有Node依赖项更新到最新版本
- 使用Node.js解析JSON
- 查找npm软件包的安装版本
- Node.js流
- 安装较旧版本的npm软件包
- 在Node中获取当前文件夹
- 如何在Node中记录对象
- 使用导出从Node文件公开功能
- 节点和浏览器之间的区别
- 使用Node发出HTTP POST请求
- 使用Node获取HTTP请求主体数据
- 节点缓冲区
- Node.js的简要历史
- 如何安装Node.js
- 使用Node您需要知道多少JavaScript?
- 如何使用Node.js REPL
- 节点,从命令行接受参数
- 使用Node输出到命令行
- 接受来自Node中命令行的输入
- 使用`npm uninstall`来卸载npm软件包。
- npm全局或本地软件包
- npm依赖项和devDependencies
- Node.js事件循环
- 了解process.nextTick()
- 了解setImmediate()
- 节点事件发射器
- 建立一个HTTP服务器
- 使用Node发出HTTP请求
- Node fs模块
- 使用Axios的Node中的HTTP请求
- 使用Node读取文件
- 节点文件路径
- 用Node写入文件
- 节点文件统计
- 在Node中使用文件描述符
- 在Node中使用文件夹
- 节点路径模块
- Node http模块
- 将WebSockets与Node.js结合使用
- 使用MySQL和Node的基础知识
- Node.js中的错误处理
- 哈巴狗指南
- 如何从Node.js读取环境变量
- 如何从Node.js程序退出
- Node os模块
- 节点事件模块
- 节点,开发与生产之间的区别
- 如何检查Node.js中是否存在文件
- 如何在Node.js中创建一个空文件
- 如何使用Node.js删除文件
- 如何使用Node.js获取文件的最后更新日期
- 如何在JavaScript中确定日期是否为今天
- 如何将JSON对象写入Node.js中的文件
- 为什么要在下一个项目中使用Node.js?
- 从任何文件夹运行Web服务器
- 如何将MongoDB与Node.js结合使用
- 使用Chrome DevTools调试Node.js应用
- 什么是pnpm?
- Node.js运行时v8选项列表
- 使用npm时如何解决“缺少写访问权限”错误
- 如何在Node.js中启用ES模块
- 如何使用Node.js生成子进程
- 如何在Express中同时获取已解析的正文和原始正文
- 如何在Node.js中处理文件上传
- 节点模块中的对等依赖性是什么?
- 如何使用Node.js编写CSV文件
- 如何使用Node.js读取CSV文件
- 节点核心模块
- 使用Node.js一次增加多个文件夹的数量
- 如何将画布打印到数据URL
- 如何使用Node.js和Canvas创建和保存图像
- 如何使用Node.js下载图像
- 如何在Node.js中批量重命名文件
- 如何获取Node中文件夹中所有文件的名称
- 如何使用Promise和基于Node.js回调的等待功能
- 如何在本地测试NPM软件包
- 如何在运行时检查当前的Node.js版本
- 如何使用Sequelize与PostgreSQL交互
- 使用Node.js服务HTML页面
- 如何解决Node.js中的util.pump不是函数错误