UNPKG

@allgemein/eventbus

Version:
70 lines 2.48 kB
"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