UNPKG

j5e

Version:

j5e is a device first robotics an IoT framework built to levarage the ECMA-419 specification

72 lines (63 loc) 1.76 kB
/** * event module - Houses event related mixins * @module j5e/event * @ignore */ /** * Provides an event base class for devices. It is not meant to be used directly. * @ignore */ export class Emitter { /** * @constructor */ constructor() { this.events = {}; } /** * Create an event listener * @param {string} event - The name of the event to listen for * @param {function} listener - A callback to run when the event is fired. */ on(event, listener) { if (typeof this.events[event] !== "object") { this.events[event] = []; } this.events[event].push(listener); } /** Remove an event listener * @param {string} event - The name of the event that we are removing a listener from * @param {function} listener - The callback that we are removing */ removeListener(event, listener) { if (typeof this.events[event] === "object") { let idx = this.events[event].indexOf(listener); if (idx > -1) { this.events[event].splice(idx, 1); } } } /** Emit an event * @param {string} event - The name of the event to emit * @ignore */ emit(event, ...rest) { if (typeof this.events[event] === "object") { let listeners = this.events[event].slice(); for (let i = 0, length = listeners.length; i < length; i++) { listeners[i].apply(this, rest); } } } /** * Create an event listener that will only fire one time. * @param {string} event - The name of the event to listen for * @param {function} listener - A callback to run when the event is fired. */ once(event, listener) { this.on(event, function g() { this.removeListener(event, g); listener.apply(this, arguments); }); } };