Recursive event dispatch detected
Production Risk
Low — only affects EventTarget (not EventEmitter); defer re-dispatches to avoid recursion.
Thrown when an EventTarget event dispatch recursively triggers the same event on the same target. The Web-compatible EventTarget API (used in Node.js for some built-ins) does not permit re-entrancy in event dispatch.
- 1An event listener dispatching the same event type on the same EventTarget synchronously
- 2Calling dispatchEvent() inside an event listener for the same event
Triggered when EventTarget.dispatchEvent() is called recursively for the same event on the same target.
const { EventTarget, Event } = require('events');
const et = new EventTarget();
et.addEventListener('test', () => {
et.dispatchEvent(new Event('test')); // recursive dispatch — throws
});
et.dispatchEvent(new Event('test'));expected output
Error [ERR_EVENT_RECURSION]: The event "test" is already being dispatched on the target
Fix
Use setImmediate or queueMicrotask to defer re-dispatch
WHEN When an event handler must trigger the same event
et.addEventListener('test', (event) => {
setImmediate(() => {
et.dispatchEvent(new Event('test')); // deferred — no recursion
});
});Why this works
Deferring the dispatch to the next iteration of the event loop breaks the synchronous recursion.
const { EventTarget, Event } = require('events');
const et = new EventTarget();
et.addEventListener('test', () => {
et.dispatchEvent(new Event('test')); // recursive dispatch — throws
});
et.dispatchEvent(new Event('test')); // this triggers ERR_EVENT_RECURSIONtry {
// operation that may throw ERR_EVENT_RECURSION
riskyOperation()
} catch (err) {
if (err.code === 'ERR_EVENT_RECURSION') {
console.error('ERR_EVENT_RECURSION:', err.message)
} else {
throw err
}
}// Validate inputs before calling the operation
function safe_err_event_recursion(...args) {
// validate args here
return performOperation(...args)
}✕ Synchronously dispatch the same event inside its own listener
EventTarget does not support re-entrant dispatch; it detects and prevents infinite recursion.
Node.js Error Codes Documentation
Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev