Problem
Explain the result of that code execution:
var EventEmitter = require("events");
var crazy = new EventEmitter();
crazy.on('event1', function () {
console.log('event1 fired!');
crazy.emit('event2');
});
crazy.on('event2', function () {
console.log('event2 fired!');
crazy.emit('event3');
});
crazy.on('event3', function () {
console.log('event3 fired!');
crazy.emit('event1');
});
crazy.emit('event1');
You’ll get an exception that basically says the call stack has exploded. Why? Every emit will invoke synchronous code. Because all callbacks are executed in a synchronous manner it’ll just recursive call itself to infinity and beyond.
Output:
console.js:165
if (isStackOverflowError(e))
^
RangeError: Maximum call stack size exceeded
at write (console.js:165:9)
at Console.log (console.js:197:3)
at EventEmitter.<anonymous> (C:\Work\Node\main.js:6:13)
at EventEmitter.emit (events.js:182:13)
at EventEmitter.<anonymous> (C:\Work\Node\main.js:18:11)
at EventEmitter.emit (events.js:182:13)
at EventEmitter.<anonymous> (C:\Work\Node\main.js:12:11)
at EventEmitter.emit (events.js:182:13)
at EventEmitter.<anonymous> (C:\Work\Node\main.js:7:11)
at EventEmitter.emit (events.js:182:13)