Decoupling your code makes it easier to maintain. EventEmitters allow different parts of your app to communicate without knowing about each other.
1Asynchronous by Default
While 'emit' technically executes listeners synchronously in the order they were registered, the pattern is the foundation for almost all asynchronous I/O in Node.js.
2Memory Leaks & Listeners
Every time you call .on(), you add a listener. If you do this inside a loop or a repeated function without calling .removeListener() or .off(), you will leak memory. Node will warn you if you exceed 10 listeners for a single event.
3The 'once' Method
Sometimes you only care about an event the first time it happens (like a 'ready' event). Use .once() instead of .on() to automatically remove the listener after it fires once.
