首页 > 编程语言 >Nodejs 第十七章(events)

Nodejs 第十七章(events)

时间:2023-11-11 20:34:54浏览次数:42  
标签:第十七章 console log Nodejs EventEmitter events test data event

EventEmitter

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

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

})

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

事件模型

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

Nodejs 第十七章(events)_Node.js

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

代码案例

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 第十七章(events)_前端_02

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

Nodejs 第十七章(events)_事件模型_03

  1. 它首先引入 event模块
  2. 获取process 的原型对象
  3. 将evnet的原型对象设给了process 的原型对象
  4. 并且重新绑定上下文
  5. 将process 挂载到globalThis 所以我们可以全局访问这个API

标签:第十七章,console,log,Nodejs,EventEmitter,events,test,data,event
From: https://blog.51cto.com/u_13463935/8319430

相关文章

  • nodejs 一些不错的ioc 框架
    nodejs周边一些ioc框架还是不少的,以下整理一些,而且不少有以前简单介绍过说明目前InversifyJS,awilix还不错基本都还在维护以及迭代中,typedi以及tsyringe似乎缺少维护了injex属于一个比较新的ioc项目,目前看使用还是比较简洁的,比较类似java的guice框架,实际上ioc框架特别多......
  • nodejs安装
    官网下载路径:https://nodejs.org/en/download,点击previousReleases查看以前的版本  Node安装yarnNodei-gyarn......
  • NodeJS系列(15)- TypeScript (二) | 对象类型 (Object Types)
    在“NodeJS系列(14)-TypeScript(一)|安装TypeScript、常用类型”里,我们简单介绍了TypeScript的安装配置,讲解和演示了TypeScript常用类型。本文继续介绍TypeScript对象类型(ObjectTypes)。TypeScript:https://www.typescriptlang.org/(中文版:https://ts.nodejs.cn/)Micro......
  • NodeJS系列(14)- TypeScript (一) | 安装 TypeScript、TypeScript 常用类型
    JavaScript现在是有史以来最广泛使用的跨平台语言之一。JavaScript最初是一种用于向网页添加微不足道的交互性的小型脚本语言,现已发展成为各种规模的前端和后端应用的首选语言。虽然用JavaScript编写的程序的大小、作用域和复杂性呈指数级增长,但JavaScript语言表达不同代码......
  • window系统通过反向代理部署nodejs
       https://dev.to/petereysermans/hosting-a-node-js-application-on-windows-with-iis-as-reverse-proxy-397b ......
  • nvm实现对nodejs的版本管理
    下载Releases·nvm-sh/nvm·GitHub介绍在我们的日常开发中经常会遇到这种情况:手上有好几个项目,每个项目的需求不同,进而不同项目必须依赖不同版的NodeJS运行环境。如果没有一个合适的工具,这个问题将非常棘手nvm应运而生,nvm是Mac下的node管理工具,有点类似管理Ruby的rvm,如果......
  • Nodejs的安装以及配置(node-v12.16.1-x64.msi)
    Nodejs的安装以及配置1、安装node-v12.16.1-x64.msi点击安装,注意以下步骤本文设置nodejs的安装的路径:D:\soft\nodejs  继续点击next,选中AddtoPATH,旁边的英文告诉我们会把环境变量给我们配置好 当然也可以只选择Node.jsruntime,根据自己需要选择安装 下面如......
  • nodejs 基于sharp + smartcrop 实现图片的智能提取排版
    属于一个简单的demo示例,主要是学习下sharp包对于图片的处理,以及基于smartcrop.js实现智能图片抠图结合sharp提供的图片组合能力,实现一个基于模版的图片组合,代码很简单简单任务描述就是有一个图片,我们需要智能的提取核心信息,并生成一个确定大小的图片,然后基于将生成的图片填......
  • nodejs 新版本build问题
    nodejs、vue问题记录【vue下载地址】https://unpkg.com/vue/dist/vue.jshttps://unpkg.com/vue@nexthttps://unpkg.com/vue@3/dist/vue.global.js【npm创建vue项目】npmcreatevue@latest 1、node新版本问题参考下:https://www.jianshu.com/p/edbad6875b7eNode.j......
  • sse_server sent event_eventSource_websocket替代_socketio替代_服务器端事件
    eventsourcebackend#-*-coding:utf-8-*-#这段代码是使用FastAPI框架创建一个简单的服务器端事件(Server-SentEvents,SSE)的示例。以下是对代码的详细解析:#1.`importjson,random,...`:这行代码导入了需要的Python模块。#2.`event_router=APIRouter()`:这行代码创建......