Nodejs 第十七章(events)

简介: Nodejs 第十七章(events)

EventEmitter

Node.js 核心 API 都是采用异步事件驱动架构,简单来说就是通过有效的方法来监听事件状态的变化,并在变化的时候做出相应的动作。

fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {
  if (err) throw err;
});
process.on('xxx',()=>{
})

举个例子,你去一家餐厅吃饭,这个餐厅就是一个调度中心,然后你去点饭,可以理解注册了一个事件emit,然后我们等候服务员的喊号,喊到我们的时候就去取餐,这就是监听了这个事件on

事件模型

Nodejs事件模型采用了,发布订阅设计模式

当一个发布者有新消息时,就将这个消息发布到调度中心。调度中心就会将这个消息通知给所有订阅者。这就实现了发布者和订阅者之间的解耦,发布者和订阅者不再直接依赖于彼此,他们可以独立地扩展自己

代码案例

const EventEmitter = require('events');
const event = new EventEmitter()
//监听test
event.on('test',(data)=>{
    console.log(data)
})
event.emit('test','xmxmxmxmx') //派发事件

监听消息数量默认是10个

const EventEmitter = require('events');
const event = new EventEmitter()
event.on('test', (data) => {
    console.log(data)
})
event.on('test', (data) => {
    console.log(data)
})
event.on('test', (data) => {
    console.log(data)
})
event.on('test', (data) => {
    console.log(data)
})
event.on('test', (data) => {
    console.log(data)
})
event.on('test', (data) => {
    console.log(data)
})
event.on('test', (data) => {
    console.log(data)
})
event.on('test', (data) => {
    console.log(data)
})
event.on('test', (data) => {
    console.log(data)
})
event.on('test', (data) => {
    console.log(data)
})
event.on('test',(data)=>{
    console.log(data)
})
event.on('test',(data)=>{
    console.log(data)
})
event.emit('test', 'xmxmxmxmx')

如何解除限制 调用 setMaxListeners 传入数量

event.setMaxListeners(20)

只想监听一次 once 即使emit派发多次也只触发一次once

const EventEmitter = require('events');
const event = new EventEmitter()
event.setMaxListeners(20)
event.once('test', (data) => {
    console.log(data)
})
event.emit('test', 'xmxmxmxmx1')
event.emit('test', 'xmxmxmxmx2')

如何取消侦听 off

const EventEmitter = require('events');
const event = new EventEmitter()
const fn = (msg) => {
   console.log(msg)
}
event.on('test', fn)
event.off('test', fn)
event.emit('test', 'xmxmxmxmx1')
event.emit('test', 'xmxmxmxmx2')

有谁用到了

process

打开nodejs 源码 搜索 setupProcessObject 这个函数

  1. 它首先引入 event模块
  2. 获取process 的原型对象
  3. 将evnet的原型对象设给了process 的原型对象
  4. 并且重新绑定上下文
  5. 将process 挂载到globalThis 所以我们可以全局访问这个API
目录
相关文章
|
7月前
|
JavaScript
超级实用!详解Node.js中的path模块和events模块
超级实用!详解Node.js中的path模块和events模块
|
JavaScript 前端开发
Node 入门(7):events 模块和发布订阅模式
本文会介绍 events 模块的主要作用和使用方式,以及自己实现一个简单的发布订阅模式,帮助加深理解。
426 0
|
机器学习/深度学习 JavaScript
NodeJs——(5)与 events 事件模块
①events模块只提供了一个对象,events.EventEmitter 他的核心是 事件发射 和 事件监听 功能   每个事件由一个事件名(用于标识事件),和多个参数组成。   事件名:字符串,通常表达一定的语义;   事件被发射时,监听该事件的函数被依次调用。     ②调用模块: var events = require("events"); var emi
1351 0
|
JavaScript API 前端开发
node.js入门 - 8.api:events
  从今天开始,我们将介绍node的一些重要的api,首先向大家介绍的是events。他是node中相当重要的一个api,也是实现其他一些api的基础,对他有好的理解,会帮助你使用好其他的api。   如果你用javascript开发过浏览器的应用,那你一定很熟悉事件。
839 0
|
1月前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
28 2
2024年5月node.js安装(winmac系统)保姆级教程
|
29天前
|
存储 JavaScript 搜索推荐
Node框架的安装和配置方法
安装 Node 框架是进行 Node 开发的第一步,通过正确的安装和配置,可以为后续的开发工作提供良好的基础。在安装过程中,需要仔细阅读相关文档和提示,遇到问题及时解决,以确保安装顺利完成。
83 2
|
3月前
|
JavaScript
NodeJs的安装
文章介绍了Node.js的安装步骤和如何创建第一个Node.js应用。包括从官网下载安装包、安装过程、验证安装是否成功,以及使用Node.js监听端口构建简单服务器的示例代码。
NodeJs的安装
|
2月前
|
JavaScript 开发工具 git
已安装nodejs但是安装hexo报错
已安装nodejs但是安装hexo报错
38 2
|
2月前
|
JavaScript 算法 内存技术
如何降低node.js版本(nvm下载安装与使用)
如何降低node.js版本(nvm下载安装与使用)
|
3月前
|
存储 JavaScript 前端开发
Node 版本控制工具 NVM 的安装和使用(Windows)
本文介绍了NVM(Node Version Manager)的Windows版本——NVM for Windows的安装和使用方法,包括如何安装Node.js的特定版本、列出已安装版本、切换使用不同版本的Node.js,以及其他常用命令,以实现在Windows系统上对Node.js版本的便捷管理。
Node 版本控制工具 NVM 的安装和使用(Windows)
下一篇
DataWorks