UNPKG

@thatcompany/ts-tool

Version:

基于TypeScript编写的工具库

97 lines 3.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApplicationEventPublisher = void 0; const logger_1 = require("../../../logger"); const logger = logger_1.LoggerContext.getSubLogger('EventPublisher', true); class ApplicationEventPublisher { eventBus; constructor(eventBus = new Map()) { this.eventBus = eventBus; } /** * 发布事件 * @param args 事件参数 */ publishEvent(...args) { const eventType = args.map((arg) => arg.constructor.name).join('::'); const listeners = this.eventBus.get(eventType); if (listeners) { listeners.forEach((item) => { try { item.method.apply(item.instance, args); } catch (error) { logger.error(`监听器运行异常: (${item.instance.constructor.name}::${item.method.name})`, error); } }); } else { logger.warn(`未找到监听器接受该事件参数类型: (${eventType})`); } } /** * 发布异步事件 * @param args 事件参数 */ async publishAsyncEvent(...args) { const eventType = args.map((arg) => arg.constructor.name).join('::'); const listeners = this.eventBus.get(eventType); if (listeners) { for (const item of listeners) { try { await item.method.apply(item.instance, args); } catch (error) { logger.error(`监听器运行异常: (${item.instance.constructor.name}::${item.method.name})`, error); } } } else { logger.warn(`未找到监听器接受该事件参数类型: (${eventType})`); } } /** * 发布事件 根据事件ID * @param eventID 事件ID 自动识别参数类型为TEventID类型,比如 'SignSendEmail' as TEventID * @param args 事件参数 自动识别参数类型为any[]类型 */ publishEventByID(eventID, ...args) { const listeners = this.eventBus.get(eventID); if (listeners) { listeners.forEach((item) => { try { item.method.apply(item.instance, args); } catch (error) { logger.error(`监听器运行异常: (${item.instance.constructor.name}::${item.method.name})`, error); } }); } else { logger.warn(`未找到监听器ID为: ${eventID},或检查eventID是否设置为TEventID类型,比如 'SignSendEmail' as TEventID`); } } /** * 发布异步事件 根据事件ID * @param eventID 事件ID 自动识别参数类型为TEventID类型,比如 'SignSendEmail' as TEventID * @param args 事件参数 自动识别参数类型为any[]类型 */ async publishAsyncEventByID(eventID, ...args) { const listeners = this.eventBus.get(eventID); if (listeners) { for (const item of listeners) { try { await item.method.apply(item.instance, args); } catch (error) { logger.error(`监听器运行异常: (${item.instance.constructor.name}::${item.method.name})`, error); } } } else { logger.warn(`未找到监听器ID为: ${eventID},或检查eventID是否设置为TEventID类型,比如 'SignSendEmail' as TEventID`); } } } exports.ApplicationEventPublisher = ApplicationEventPublisher; //# sourceMappingURL=ApplicationEventPublisher.js.map