events: add getMaxListeners method

PR-URL: https://github.com/nodejs/node/pull/47039
Reviewed-By: Debadree Chatterjee <debadree333@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
This commit is contained in:
Khafra 2023-03-19 08:58:19 -04:00 committed by GitHub
parent 0fd14e4034
commit 3904ef8d77
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 89 additions and 0 deletions

View File

@ -1266,6 +1266,58 @@ const { getEventListeners, EventEmitter } = require('node:events');
}
```
## `events.getMaxListeners(emitterOrTarget)`
<!-- YAML
added: REPLACEME
-->
* `emitterOrTarget` {EventEmitter|EventTarget}
* Returns: {number}
Returns the currently set max amount of listeners.
For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
the emitter.
For `EventTarget`s this is the only way to get the max event listeners for the
event target. If the number of event handlers on a single EventTarget exceeds
the max set, the EventTarget will print a warning.
```mjs
import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
{
const ee = new EventEmitter();
console.log(getMaxListeners(ee)); // 10
setMaxListeners(11, ee);
console.log(getMaxListeners(ee)); // 11
}
{
const et = new EventTarget();
console.log(getMaxListeners(et)); // 10
setMaxListeners(11, et);
console.log(getMaxListeners(et)); // 11
}
```
```cjs
const { getMaxListeners, setMaxListeners, EventEmitter } = require('node:events');
{
const ee = new EventEmitter();
console.log(getMaxListeners(ee)); // 10
setMaxListeners(11, ee);
console.log(getMaxListeners(ee)); // 11
}
{
const et = new EventTarget();
console.log(getMaxListeners(et)); // 10
setMaxListeners(11, et);
console.log(getMaxListeners(et)); // 11
}
```
## `events.once(emitter, name[, options])`
<!-- YAML

View File

@ -220,6 +220,7 @@ module.exports = EventEmitter;
module.exports.once = once;
module.exports.on = on;
module.exports.getEventListeners = getEventListeners;
module.exports.getMaxListeners = getMaxListeners;
// Backwards-compat with node 0.10.x
EventEmitter.EventEmitter = EventEmitter;
@ -930,6 +931,23 @@ function getEventListeners(emitterOrTarget, type) {
emitterOrTarget);
}
/**
* Returns the max listeners set.
* @param {EventEmitter | EventTarget} emitterOrTarget
* @returns {number}
*/
function getMaxListeners(emitterOrTarget) {
if (typeof emitterOrTarget?.getMaxListeners === 'function') {
return _getMaxListeners(emitterOrTarget);
} else if (emitterOrTarget?.[kMaxEventTargetListeners]) {
return emitterOrTarget[kMaxEventTargetListeners];
}
throw new ERR_INVALID_ARG_TYPE('emitter',
['EventEmitter', 'EventTarget'],
emitterOrTarget);
}
/**
* Creates a `Promise` that is fulfilled when the emitter
* emits the given event.

View File

@ -0,0 +1,19 @@
'use strict';
require('../common');
const assert = require('node:assert');
const { getMaxListeners, EventEmitter, defaultMaxListeners, setMaxListeners } = require('node:events');
{
const ee = new EventEmitter();
assert.strictEqual(getMaxListeners(ee), defaultMaxListeners);
setMaxListeners(101, ee);
assert.strictEqual(getMaxListeners(ee), 101);
}
{
const et = new EventTarget();
assert.strictEqual(getMaxListeners(et), defaultMaxListeners);
setMaxListeners(101, et);
assert.strictEqual(getMaxListeners(et), 101);
}