Skip to content

Instantly share code, notes, and snippets.

@lykkin
Created March 22, 2017 00:05
Show Gist options
  • Save lykkin/58ea310e52b518fd4bdb3d2cb76e3ecb to your computer and use it in GitHub Desktop.
Save lykkin/58ea310e52b518fd4bdb3d2cb76e3ecb to your computer and use it in GitHub Desktop.
emitter garbage
const EventEmitter = require('events')
class UserEmitter extends EventEmitter {}
const e = new UserEmitter()
e.on('incomingData', (data) => {
data.forEach((user) => e.emit(user.id, user))
})
userId = 0
class User {
constructor(name) {
this.id = ++userId
this.name = name || 'default'
this.listener = (newData) => Object.keys(newData).forEach((key) => this[key] = newData[key])
e.on(String(this.id), this.listener)
}
destroy() {
e.removeListener(String(this.id), this.listener)
}
}
var u1 = new User('asdf')
var u2 = new User('zxcv')
console.log('u1 name:', u1.name)
console.log('u2 name:', u2.name)
e.emit('incomingData', [
{
id: 1,
name: 'first'
},
{
id: 2,
name: 'second'
},
{
id: 3,
name: 'third'
},
])
console.log('u1 name:', u1.name)
console.log('u2 name:', u2.name)
u1.destroy()
e.emit('incomingData', [
{
id: 1,
name: 'dead'
},
{
id: 2,
name: 'changed'
},
])
console.log('u2 name:', u2.name)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment