- 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 条件查询
- Node.js - MySQL 排序
- 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 - 讨论
NodeJS - emitter.setMaxListeners() 方法
emitter.setMaxListeners() 方法允许我们修改特定 EventEmitter 实例的监听器限制。默认情况下,EventEmitter 不会允许单个事件超过 10 个监听器,如果添加超过 10 个监听器,EventEmitter 将发出警告消息。
要允许向特定事件添加无限数量的监听器,我们可以将值设置为 Infinity 或 0。
此方法属于EventEmitter 类,它是 node:events 模块的内置类。
语法
以下是 NodeJs emitter.setMaxListeners() 方法的语法:
emitter.setMaxListeners(n)
参数
此方法只接受一个参数,如下所述。
- n: 此参数将保存为特定 EventEmitter 实例设置的最大值。
返回值
此方法返回对 EventEmitter 的引用,以便可以链接调用。
示例 1
以下是 NodeJs emitter.setMaxListeners() 方法的基本示例。
首先,我们导入了 node:events 模块。然后,我们使用 eventName ‘myEvent’ 将五个监听器函数传递给 emitter.addListener() 方法。这里我们没有为特定事件设置任何限制。因此,如果我们编译并运行程序,将打印“10”到输出,因为默认情况下,最多可以添加 10 个监听器。
const EventEmitter = require('node:events');
const myEmitter = new EventEmitter();
myEmitter.addListener('myEvent', function one() {
});
myEmitter.addListener('myEvent', function two() {
});
myEmitter.addListener('myEvent', function three() {
});
myEmitter.addListener('myEvent', function four() {
});
myEmitter.addListener('myEvent', function five() {
});
console.log(myEmitter.getMaxListeners('myEvent'));
输出
上述程序产生以下输出:
10
示例 2
在这个程序中,我们调用了 emitter.setMaxListener() 方法,但是我们没有向其传递任何参数。如果我们编译并运行程序,它将向输出抛出一个错误消息。
const EventEmitter = require('node:events');
const myEmitter = new EventEmitter();
myEmitter.setMaxListeners();
myEmitter.addListener('myEvent', function one() {
});
myEmitter.addListener('myEvent', function two() {
});
myEmitter.addListener('myEvent', function three() {
});
myEmitter.addListener('myEvent', function four() {
});
myEmitter.addListener('myEvent', function five() {
});
console.log(myEmitter.getMaxListeners('myEvent'));
输出
上述程序产生以下输出:
node:events:397
throw new ERR_OUT_OF_RANGE('n', 'a non-negative number', n);
^
RangeError [ERR_OUT_OF_RANGE]: The value of "n" is out of range. It must be a non-negative number. Received undefined
at new NodeError (node:internal/errors:371:5)
at EventEmitter.setMaxListeners (node:events:397:11)
at Object. (/index.js:4:11)
at Module._compile (node:internal/modules/cjs/loader:1103:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47 {
code: 'ERR_OUT_OF_RANGE'
}
示例 3
我们调用了 emitter.setMaxListener() 方法,但是我们传递了一个负数作为参数。它将向输出抛出一个错误消息。
const EventEmitter = require('node:events');
const myEmitter = new EventEmitter();
myEmitter.setMaxListeners(-3);
myEmitter.addListener('myEvent', function one() {
});
myEmitter.addListener('myEvent', function two() {
});
myEmitter.addListener('myEvent', function three() {
});
myEmitter.addListener('myEvent', function four() {
});
myEmitter.addListener('myEvent', function five() {
});
console.log(myEmitter.getMaxListeners('myEvent'));
输出
上述程序产生以下输出:
node:events:300
throw new ERR_OUT_OF_RANGE('n', 'a non-negative number', n);
^
RangeError [ERR_OUT_OF_RANGE]: The value of "n" is out of range. It must be a non-negative number. Received -2
at new NodeError (node:internal/errors:371:5)
at EventEmitter.setMaxListeners (node:events:300:13)
at Object. (/index.js:6:1)
at Module._compile (node:internal/modules/cjs/loader:1103:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47 {
code: 'ERR_OUT_OF_RANGE'
}
示例 4
在这个程序中,我们向特定事件“myEvent”添加了 11 个监听器。默认情况下,EventEmitter 对于特定事件最多只接受 10 个监听器。当我们编译并运行下面的程序时,EventEmitter 将向输出发出警告消息。
const EventEmitter = require('node:events');
const myEmitter = new EventEmitter();
myEmitter.addListener('myEvent', function one() {
});
myEmitter.addListener('myEvent', function two() {
});
myEmitter.addListener('myEvent', function three() {
});
myEmitter.addListener('myEvent', function four() {
});
myEmitter.addListener('myEvent', function five() {
});
myEmitter.addListener('myEvent', function six() {
});
myEmitter.addListener('myEvent', function seven() {
});
myEmitter.addListener('myEvent', function eight() {
});
myEmitter.addListener('myEvent', function nine() {
});
myEmitter.addListener('myEvent', function ten() {
});
myEmitter.addListener('myEvent', function eleven() {
});
console.log(myEmitter.getMaxListeners('myEvent'));
输出
上述程序产生以下输出:
10 (node:11610) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 myEvent listeners added to [EventEmitter]. Use emitter.setMaxListeners() to increase limit (Use `node --trace-warnings ...` to show where the warning was created)
示例 5
在下面的程序中,我们向特定事件“myEvent”添加了 3 个监听器。我们调用了 emitter.setMaxListener() 方法,并向其传递了一个非负数作为参数。我们添加了 3 个监听器,我们传递的限制也是 3。它将返回“3”作为输出,因为最大限制是 3。
const EventEmitter = require('node:events');
const myEmitter = new EventEmitter();
myEmitter.setMaxListeners(3);
myEmitter.addListener('myEvent', function one() {
});
myEmitter.addListener('myEvent', function two() {
});
myEmitter.addListener('myEvent', function three() {
});
console.log(myEmitter.getMaxListeners('myEvent'));
输出
上述程序产生以下输出:
3
