- Node.js 教程
- Node.js - 首页
- Node.js - 简介
- Node.js - 环境设置
- Node.js - 第一个应用程序
- Node.js - REPL 终端
- Node.js - 命令行选项
- Node.js - 包管理器 (NPM)
- Node.js - 回调函数概念
- Node.js - 上传文件
- Node.js - 发送电子邮件
- Node.js - 事件
- Node.js - 事件循环
- Node.js - 事件发射器
- Node.js - 调试器
- Node.js - 全局对象
- Node.js - 控制台
- Node.js - 进程
- Node.js - 应用程序扩展
- Node.js - 打包
- Node.js - Express 框架
- Node.js - RESTFul API
- Node.js - 缓冲区
- Node.js - 流
- Node.js - 文件系统
- Node.js MySQL
- Node.js - MySQL 入门
- Node.js - MySQL 创建数据库
- Node.js - MySQL 创建表
- Node.js - MySQL 插入数据
- Node.js - MySQL 从表中选择数据
- Node.js - MySQL Where 条件
- Node.js - MySQL Order By 排序
- Node.js - MySQL 删除数据
- Node.js - MySQL 更新数据
- Node.js - MySQL 联接
- Node.js MongoDB
- Node.js - MongoDB 入门
- Node.js - MongoDB 创建数据库
- Node.js - MongoDB 创建集合
- Node.js - MongoDB 插入数据
- Node.js - MongoDB 查找数据
- Node.js - MongoDB 查询
- Node.js - MongoDB 排序
- Node.js - MongoDB 删除数据
- Node.js - MongoDB 更新数据
- Node.js - MongoDB 限制结果
- Node.js - MongoDB 联接
- Node.js 模块
- Node.js - 模块
- Node.js - 内置模块
- Node.js - 实用程序模块
- Node.js - Web 模块
- Node.js 有用资源
- Node.js - 快速指南
- Node.js - 有用资源
- Node.js - 讨论
Node.js - 事件发射器
Node.js API 基于事件驱动的架构。它包含 events 模块,该模块提供了创建和处理自定义事件的功能。event 模块包含 EventEmitter 类。EventEmitter 对象发出命名事件。此类事件会调用监听器函数。事件发射器在 Node.js 生态系统中起着至关重要的作用。Node 中的许多对象都会发出事件,例如,每次对等体连接到 net.Server 对象或连接关闭时,它都会发出事件。当文件打开、关闭、执行读/写操作时,fs.readStream 对象会发出事件。所有发出事件的对象都是 events.EventEmitter 的实例。
由于 EvenEmitter 类是在 events 模块中定义的,因此我们必须使用 require 语句将其包含在代码中。
var events = require('events');
要发出事件,我们应该声明一个 EventEmitter 类的对象。
var eventEmitter = new events.EventEmitter();
当 EventEmitter 实例遇到任何错误时,它会发出“error”事件。当添加新的监听器时,会触发“newListener”事件,当移除监听器时,会触发“removeListener”事件。
序号 | 事件及描述 |
---|---|
1 | newListener(event, listener)
每次添加监听器时都会发出此事件。当触发此事件时,监听器可能尚未添加到该事件的监听器数组中。 |
2 |
removeListener(event, listener)
每次有人移除监听器时都会发出此事件。当触发此事件时,监听器可能尚未从该事件的监听器数组中移除。 |
EventEmitter 类中定义了以下实例方法:
序号 | 事件及描述 |
---|---|
1 | addListener(event, listener) 在指定事件的监听器数组末尾添加一个监听器。返回发射器,以便可以链接调用。 |
2 | on(event, listener) 在指定事件的监听器数组末尾添加一个监听器。与 addListener 相同。 |
3 | once(event, listener) 为事件添加一个一次性监听器。此监听器仅在下一次触发事件时调用,之后将其移除。 |
4 | removeListener(event, listener) 从指定事件的监听器数组中移除一个监听器。如果将任何单个监听器多次添加到指定事件的监听器数组中,则必须多次调用 removeListener 以移除每个实例。 |
5 | removeAllListeners([event]) 移除所有监听器,或指定事件的监听器。最好不要移除在代码其他地方添加的监听器,尤其是在您未创建的发射器(例如套接字或文件流)上。 |
6 | setMaxListeners(n) 默认情况下,如果为特定事件添加了超过 10 个监听器,则 EventEmitters 会打印警告。设置为零表示无限制。 |
7 | listeners(event) 返回指定事件的监听器数组。 |
8 | emit(event, [arg1], [arg2], [...]) 按顺序使用提供的参数执行每个监听器。如果事件有监听器,则返回 true,否则返回 false。 |
9 | off(event, listener) removeListener 的别名 |
示例
让我们定义如下两个监听器函数:
var events = require('events'); var eventEmitter = new events.EventEmitter(); // listener #1 var listner1 = function listner1() { console.log('listner1 executed.'); } // listener #2 var listner2 = function listner2() { console.log('listner2 executed.'); }
让我们将这些监听器绑定到连接事件。第一个函数 listener1 使用 addListener() 方法注册,而我们使用 on() 方法绑定 listener2。
// Bind the connection event with the listner1 function eventEmitter.addListener('connection', listner1); // Bind the connection event with the listner2 function eventEmitter.on('connection', listner2); // Fire the connection event eventEmitter.emit('connection');
当使用 emit() 方法触发连接事件时,控制台会显示监听器中的日志消息,如上所示。
listner1 executed. listner2 executed.
让我们从连接事件中移除 listener2 回调,然后再次触发连接事件。
// Remove the binding of listner1 function eventEmitter.removeListener('connection', listner1); console.log("Listner1 will not listen now."); // Fire the connection event eventEmitter.emit('connection');
控制台现在显示以下日志:
listner1 executed. listner2 executed. Listner1 will not listen now. listner2 executed.
EventEmitter 类还具有 listCount() 方法。它是一个类方法,返回给定事件的监听器数量。
const events = require('events'); const myEmitter = new events.EventEmitter(); // listener #1 var listner1 = function listner1() { console.log('listner1 executed.'); } // listener #2 var listner2 = function listner2() { console.log('listner2 executed.'); } // Bind the connection event with the listner1 function myEmitter.addListener('connection', listner1); // Bind the connection event with the listner2 function myEmitter.on('connection', listner2); // Fire the connection event myEmitter.emit('connection'); console.log("Number of Listeners:" + myEmitter.listenerCount('connection'));
输出
listner1 executed. listner2 executed. Number of Listeners:2