@allgemein/eventbus
Version:
72 lines • 2.23 kB
JavaScript
"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