@allgemein/eventbus
Version:
70 lines • 2.48 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.NsqdObject = void 0;
const CryptUtils_1 = require("../../utils/CryptUtils");
const Serializer_1 = require("../../utils/Serializer");
class NsqdObject {
constructor(adapter2, eventID, object) {
this.error = null;
this.result = null;
this.uuid = CryptUtils_1.CryptUtils.shorthash(Date.now() + '');
this.id = eventID;
this.object = object;
this.adapter = adapter2;
this.emitter = this.adapter.getEmitter();
this.emitter.once(this.id + '_' + this.uuid + '_done', (err, res) => {
this.result = res;
this.error = err;
// TODO maybe we need results from multiple nodes? We should collect node number and subscriptions! Currently we need one or none ...
this.emitter.removeAllListeners(this.id + '_' + this.uuid + '_done');
});
}
async fire() {
const writer = await this.adapter.getPublisher();
const _msp = {
source: this.adapter.nodeId,
uuid: this.uuid,
status: 'work',
event: this.id,
object: this.object
};
const msg = {
topic: this.adapter.name,
message: Serializer_1.Serializer.serialize(_msp)
// message: _msp
};
await writer.publish(msg);
}
waitForResult(ttl = 10000) {
return new Promise(async (resolve, reject) => {
let timer = null;
if (ttl > 0) {
timer = setTimeout(() => {
this.emitter.removeAllListeners(this.id + '_' + this.uuid + '_done');
reject(new Error('ttl ' + ttl + ' passed'));
}, ttl);
}
if (this.result) {
clearTimeout(timer);
resolve(this.result);
}
else if (this.error) {
clearTimeout(timer);
reject(this.error);
}
else {
this.emitter.once(this.id + '_' + this.uuid + '_done', (err, res) => {
clearTimeout(timer);
if (err) {
reject(err);
}
else {
resolve(res);
}
});
}
});
}
}
exports.NsqdObject = NsqdObject;
//# sourceMappingURL=NsqdObject.js.map