Last active
February 20, 2020 23:02
-
-
Save ZeroDragon/1729ea65dd434dee59d6afdd2f42a1ef to your computer and use it in GitHub Desktop.
Browser side eventEmitter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class EventEmitter { | |
constructor () { | |
this.DOM = document.createElement("p") | |
} | |
on(channel, fn) { | |
this.DOM.addEventListener(channel, event => { | |
fn(event.detail) | |
}) | |
} | |
dispatch(channel, data) { | |
const detail = typeof data === 'string' ? data : JSON.stringify(data) | |
this.DOM.dispatchEvent(new CustomEvent(channel, { detail })) | |
} | |
} | |
// Usage | |
const myEvent = new EventEmitter() | |
myEvent.on('message', console.log) | |
myEvent.dispatch('message', 'hi browser side events') // "hi browser side events" |
El mandar la funcion para el off
como segundo argument es un "standard" para Event Based libraries, ejemplo
DOM : https://www.w3schools.com/jsref/met_element_removeeventlistener.asp
nodeJS emitter : https://nodejs.org/api/events.html#events_emitter_removelistener_eventname_listener
jQuery : https://api.jquery.com/off/#off-events-selector-handler
Internals http en node : https://github.com/nodejs/node/blob/master/lib/_http_server.js#L630-L635
... y otros
yo sugiero usar el mismo patron ...
si no me equiboco hay memory leak en el once
ya que solo hay un filter pero no purga el handler del event queue
en nodos dinamicos esto puede ser critico.
flexeas bien cabrón, dude. Tengo q mejorar mucho
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Ok aqui ve va la versión mejorada... quedó gordito pero en el ejemplo que pusiste veo 2 cosas que quise mejorar:
off
necesitas mandarle la misma función para poder des suscribirte, así que cambié eso a un uuidModo de uso:
resultado:
