UNPKG

@allgemein/eventbus

Version:
72 lines 2.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AbstractPseudoObject = void 0; const CryptUtils_1 = require("../utils/CryptUtils"); const timers_1 = require("timers"); class AbstractPseudoObject { constructor(adapter, eventID, object) { this.error = null; this.result = null; this.timer = null; this.uuid = CryptUtils_1.CryptUtils.shorthash(Date.now() + ''); this.eventID = eventID; this.object = object; this.adapter = adapter; this.adapter.getEmitter().once(this.listenerEventName(), this.onDone.bind(this)); } onDone(err, res) { if (this.resolve || this.reject) { if (err) { this.reject(err); } else { this.resolve(res); } } else { this.result = res; this.error = err; } this.reset(); } waitForResult(ttl = 10000) { return new Promise((resolve, reject) => { this.resolve = resolve; this.reject = reject; if (ttl > 0) { this.timer = (0, timers_1.setTimeout)(() => { this.reset(); reject(new Error('ttl ' + ttl + ' passed')); }, ttl); } if (this.result) { this.reset(); resolve(this.result); } else if (this.error) { this.reset(); reject(this.error); } else if (ttl === 0) { this.reset(); resolve(null); } }); } listenerEventName(type = 'done') { return [this.eventID, this.uuid, type].join('_'); } reset() { if (this.adapter) { const emitter = this.adapter.getEmitter(); emitter.removeAllListeners(this.listenerEventName()); } (0, timers_1.clearTimeout)(this.timer); this.object = null; this.adapter = null; this.reject = null; this.resolve = null; } } exports.AbstractPseudoObject = AbstractPseudoObject; //# sourceMappingURL=AbstractPseudoObject.js.map