@skyway-sdk/analytics-client
Version:
The official Next Generation JavaScript SDK for SkyWay
47 lines • 1.57 kB
JavaScript
;
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