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