A Node.js story:
Event Emitters

Kate Humphrey
What's About to Happen
- Overview of Node
- Synopsis of the Event Loop
- Into to Event Queue
- Event Emitters
- Fundamentals
- (a)synchronicity
- Methods Galore
- Recreation - Live Coding
Node
- High Speed
- Event-driven Architecture
- Emitters
- Listeners
- Examples:
- net.Server
- fs.ReadStream
Event Loop
Single-threaded
Call Stack
APIs
Event Queue

console.log('Hello')
setTimeout(() => {
console.log('timed out')
}, 0)
console.log('World')
console.log('Hello')
== one call stack == one thing at a time
Event Loop
Single-threaded == one call stack == one thing at a time
Call Stack
APIs
Event Queue

console.log('Hello')
setTimeout(() => {
console.log('timed out')
}, 0)
console.log('World')
setTimeout(() => {
console.log('timed out')
}, 0)
Event Loop
Single-threaded == one call stack == one thing at a time
Call Stack
APIs
Event Queue

console.log('Hello')
setTimeout(() => {
console.log('timed out')
}, 0)
console.log('World')
setTimeout(() => {
console.log('timed out')
}, 0)
Event Loop
Single-threaded == one call stack == one thing at a time
Call Stack
APIs
Event Queue

console.log('Hello')
setTimeout(() => {
console.log('timed out')
}, 0)
console.log('World')
console.log('timed out')
console.log('World')
Event Loop
Single-threaded == one call stack == one thing at a time
Call Stack
APIs
Event Queue

console.log('Hello')
setTimeout(() => {
console.log('timed out')
}, 0)
console.log('World')
console.log('timed out')
Event Loop
Single-threaded == one call stack == one thing at a time
Call Stack
APIs
Event Queue

console.log('Hello')
setTimeout(() => {
console.log('timed out')
}, 0)
console.log('World')
console.log('timed out')
Event Loop
Single-threaded == one call stack == one thing at a time
Call Stack
APIs
Event Queue

console.log('Hello')
setTimeout(() => {
console.log('timed out')
}, 0)
console.log('World')
Event Loop
Let's code it!
Event Queue
Event Queue
Timers
pending callbacks
Poll
setImmediate
Incoming:
connections,
data, etc.
process.nextTick
Event Queue
Let's check out some code!
Event Emitters
Fundamentals
- 'events' module
- EventEmitter.on(eventName, listener)
- alias .addListener
- .prependListener
- Return EventEmitter for chaining
- *No listener checks on event
- EventEmitter.emit(eventName, [arg1], [arg2]...)
- Returns boolean
- Let's code a little ourselves!
- Synchronous
- Emitting asynchronously
- Returned values of listener functions
- I lied! Listeners can be asynchronous!
- Now let's take it for a spin!!
Event Emitters
(a)synchronicity
- .once vs .on
- .prependOnceListener
- .removeAllListeners & .removeListener
- .getMaxListeners / .listenerCount
- .defaultMaxListeners / .setMaxListeners
- Not a hard limit -- memory leak
- .listener / .eventNames
Event Emitters
Methods Galore
- Let's see some of this in action!
Now let's make our own from scratch!!
Event Emitters
Recreation
Event Emitters
Resources
deck
By Kate Humphrey
deck
- 846