UNPKG

@skyway-sdk/analytics-client

Version:

The official Next Generation JavaScript SDK for SkyWay

47 lines 1.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Event = void 0; class Event { constructor() { this._listeners = new Map(); this._listenerIndex = 0; this.emit = (arg) => { this._listeners.forEach((listener) => listener(arg)); }; this.removeAllListeners = () => { this._listeners.clear(); }; this.addListener = (listener) => { const id = this._listenerIndex; this._listeners.set(id, listener); this._listenerIndex++; const removeListener = () => { this._listeners.delete(id); }; return { removeListener }; }; this.addOneTimeListener = (listener) => { const off = this.addListener((arg) => { off.removeListener(); listener(arg); }); return off; }; this.asPromise = (timeLimit) => new Promise((resolve, reject) => { let removeListener = () => { }; const timeout = timeLimit && setTimeout(() => { reject('Event asPromise timeout'); removeListener(); }, timeLimit); const off = this.addOneTimeListener((arg) => { if (timeout) clearTimeout(timeout); resolve(arg); }); removeListener = off.removeListener; }); } } exports.Event = Event; //# sourceMappingURL=event.js.map