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:
parent
0fd14e4034
commit
3904ef8d77
@ -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
|
||||
|
@ -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.
|
||||
|
19
test/parallel/test-events-getmaxlisteners.js
Normal file
19
test/parallel/test-events-getmaxlisteners.js
Normal 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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user