Skip to content

Instantly share code, notes, and snippets.

@VitorLuizC
Last active April 1, 2018 05:22
Show Gist options
  • Select an option

  • Save VitorLuizC/774ab7475b17eb9c8070d854c88e2852 to your computer and use it in GitHub Desktop.

Select an option

Save VitorLuizC/774ab7475b17eb9c8070d854c88e2852 to your computer and use it in GitHub Desktop.

A biblioteca consiste num mapa de valor e ouvintes.

type Handler = (payload: any) => void;

type Listeners = Map<string, Array<Handler>>;

type Emitters = WeakMap<any, Listeners>;

Qualquer valor JavaScript pode ter ouvintes relacionados a ele.

const createEventEmitter = (name: any) => EventEmitter;

createEventEmitter('Sou um valor qualquer').on('Evento', (payload) => console.log('Handler do "Evento". ' + payload))

createEventEmitter('Sou um valor qualquer').emit('Evento', 'Sou o payload do "Evento".')

// Handler do "Evento". Sou o payload do "Evento".
const emitters = new WeakMap();
const getListeners = (name) => emitters.get(name);
const getHandlers = (name, event) => {
const listeners = getListeners(name);
const handlers = listeners && listeners.get(event);
return handlers;
};
const emitter = (name) => ({
emit (event, payload) {
const handlers = getHandlers(name, event) || [];
handlers.forEach((handler) => handler(payload));
return this;
},
on (event, handler) {
const listeners = getListeners(name);
const handlers = [ ...getHandlers(name, event) || [], handler ];
listeners.set(event, handlers);
emitters.set(name, listeners);
return this;
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment