Skip to content

Instantly share code, notes, and snippets.

@Josema
Last active May 6, 2023 09:18
Show Gist options
  • Save Josema/c3f8958c596aca2f98c053819e233d1f to your computer and use it in GitHub Desktop.
Save Josema/c3f8958c596aca2f98c053819e233d1f to your computer and use it in GitHub Desktop.
createEventEmitter
function createEventEmitter() {
const events = {}
return {
on: (name, listener) => {
if (typeof name !== 'string') {
throw new Error(`Not valid name ${name}:${typeof name}`)
}
if (typeof listener !== 'function') {
throw new Error(`Not valid listener ${name} ${typeof listener}`)
}
const listeners = events.hasOwnProperty(name)
? events[name]
: (events[name] = [])
listeners.push(listener)
},
emit: (name, ...params) => {
const listeners = events[name] || []
return listeners.map((listener) => {
return listener(...params)
})
},
remove: (name, listener) => {
const index = events[name].indexOf(listener)
events[name].splice(index, 1)
}
}
}
const emitter = createEventEmitter()
function listener(a, b) {
console.log(a, b)
}
emitter.on('myevent', listener)
emitter.emit('myevent', 1, 2)
emitter.remove('myevent', listener)
emitter.emit('myevent', 1, 2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment