Blog
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)

HiuZing

🍑
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)
  • 前端面试题

  • JavaScript

  • Vue2

  • port

  • CSS

  • Node.js

    • nvm

    • Node.js实例

    • Pm2

    • npm

    • 教程

      • Node.js-回调函数
      • Node.js-事件循环
        • Node.js-事件循环
          • 程序绑定事件
          • 程序触发事件
          • 实例
          • EventEmitter
          • EventEmitter 提供了多个属性
      • Node.js-Buffer
      • Node.js-Stream
      • Node.js-函数
      • Node.js-模块系统
      • Node.js-路由
      • Node.js-全局对象
      • Node.js-常用工具
      • Node.js-文件系统
  • JavaScript优化

  • uniapp

  • Mini Program

  • TypeScript

  • 面向对象编程

  • UI组件

  • Plugin

  • Vue3

  • 性能优化

  • Axios

  • 状态管理

  • React

  • Mock

  • Icon

  • Template

  • 构建工具

  • 项目规范配置

  • Taro

  • SVG

  • React Native

  • 前端
  • Node.js
  • 教程
HiuZing
2023-02-17
目录

Node.js-事件循环

# Node.js-事件循环

事件循环是 Node.js 处理非阻塞 I/O 操作的机制——尽管 JavaScript 是单线程处理的——当有可能的时候,它们会把操作转移到系统内核中去

当其中一个操作完成时,内核会告诉Node.js,以便Node.js可以将相应的回调添加到轮询队列中以最终执行。

Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求

当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户

整个事件驱动的流程就是这么实现的,非常简洁。有点类似于观察者模式,事件相当于一个主题(Subject),而所有注册到这个事件上的处理函数相当于观察者(Observer)

Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件

# 程序绑定事件

// 绑定事件及事件的处理程序
eventEmitter.on('eventName', eventHandler);
1
2

# 程序触发事件

// 触发事件
eventEmitter.emit('eventName');
1
2

# 实例

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();
 
// 创建事件处理程序
var connectHandler = function connected() {
   console.log('连接成功。');
  
   // 触发 data_received 事件 
   eventEmitter.emit('data_received');
}
 
// 绑定 connection 事件处理程序
eventEmitter.on('connection', connectHandler);
 
// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
   console.log('数据接收成功。');
});
 
// 触发 connection 事件 
eventEmitter.emit('connection');
 
console.log("程序执行完毕。");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ node main.js
连接成功。
数据接收成功。
程序执行完毕。
1
2
3
4

# EventEmitter

每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义

对于每个事件,EventEmitter 支持 若干个事件监听器

当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递

//event.js 文件
var events = require('events'); 
var emitter = new events.EventEmitter(); 
emitter.on('someEvent', function(arg1, arg2) { 
    console.log('listener1', arg1, arg2); 
}); 
emitter.on('someEvent', function(arg1, arg2) { 
    console.log('listener2', arg1, arg2); 
}); 
emitter.emit('someEvent', 'arg1 参数', 'arg2 参数'); 
1
2
3
4
5
6
7
8
9
10
$ node event.js 
listener1 arg1 参数 arg2 参数
listener2 arg1 参数 arg2 参数
1
2
3

# EventEmitter 提供了多个属性

# 方法

方法 描述
addListener(event, listener) 为指定事件添加一个监听器到监听器数组的尾部
on(event, listener) 为指定事件注册一个监听器
once(event, listener) 为指定事件注册一个单次监听器
removeListener(event, listener) 移除指定事件的某个监听器(两个参数,第一个是事件名称,第二个是回调函数名称)
removeAllListeners([event]) 移除所有事件的所有监听器
setMaxListeners(n) 用于改变监听器的默认限制的数量
listeners(event) 返回指定事件的监听器数组
emit(event, [arg1], [arg2], [...]) 按监听器的顺序执行执行每个监听器,如果事件有注册监听返回 true,否则返回 false

# 类方法

// 返回指定事件的监听器数量。
events.emitter.listenerCount(eventName) //推荐
1
2
上次更新: 2024/08/14, 04:14:33
Node.js-回调函数
Node.js-Buffer

← Node.js-回调函数 Node.js-Buffer→

最近更新
01
React Native 使用SVG
08-13
02
Docker基础命令
08-04
03
算数逻辑单元
07-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 WeiXiaojing | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式