NodeJS - emitter.setMaxListeners() Method


The emitter.setMaxListeners() method allows us to modify the limit for the specific EventEmitter instance. By default, the EventEmitter will not allow more than 10 listeners to a particular event, if more than 10 listeners are added the EventEmitter will throw a warning message.

To allow an infinite number of listeners to be added to a specific event, we can set the value to Infinity or 0.

This method belongs to Eventemitter class is an inbuilt class of node:events module.

Syntax

Following is the syntax of the NodeJs emitter.setMaxListeners() method −

emitter.setMaxListeners(n)

Parameters

This method accepts only one parameter as described below.

  • n: This parameter will hold the maximum value to be set for the specific EventEmitter instance.

Return value

This method returns a reference to the EventEmitter so that calls can be chained.

Example 1

Following is the basic example of the NodeJs emitter.setMaxListeners() Method.

Initially, we imported the node:events module. Then we passed five listener functions with an eventName myEvent to the emitter.addListener() method. Here we havent set any limit to the particular event. So that if we compile and run the program, 10 will be printed to the output because by default the maximum limit of listeners can be added is 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'));

Output

The above program produces the following output −

10

Example 2

In this program, We called the emitter.setMaxListener() method, but we havent passed any parameter to it. If we compile and run the program, it will throw an error message to the output.

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'));

Output

The above program produces the following output −

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'
}

Example 3

We called the emitter.setMaxListener() method, but we passed a negative number as a parameter to it. it will throw an error message to the output.

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'));

Output

The above program produces the following output −

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'
}

Example 4

In this program, we added 11 listeners to the specific event myEvent, By default, EventEmitter will accept only 10 listeners at maximum for a particular event. When we compile and run the program below, the EventEmitter will throw a warning message to the output.

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'));

Output

The above program produces the following output −

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)

Example 5

In the following program, we added 3 listeners to the specific event myEvent. we called the emitter.setMaxListener() method and we passed a non-negative number as a parameter to it. We added 3 listeners and the limit we passed is also 3. It will return 3 to the output as the maximum limit is 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'));

Output

The above program produces the following output −

3
nodejs_events.htm
Advertisements