mirror of
https://github.com/Unleash/unleash.git
synced 2025-07-26 13:48:33 +02:00
fix: tear down also event handlers in addon service (#10295)
This commit is contained in:
parent
082a6fdb16
commit
89cff9d533
@ -110,6 +110,13 @@ export default class EventService {
|
||||
return this.eventStore.on(eventName, listener);
|
||||
}
|
||||
|
||||
off(
|
||||
eventName: string | symbol,
|
||||
listener: (...args: any[]) => void,
|
||||
): EventEmitter {
|
||||
return this.eventStore.off(eventName, listener);
|
||||
}
|
||||
|
||||
private async enhanceEventsWithTags(
|
||||
events: IBaseEvent[],
|
||||
): Promise<IBaseEvent[]> {
|
||||
|
@ -59,6 +59,8 @@ export default class AddonService {
|
||||
fetchAddonConfigs: (() => Promise<IAddon[]>) &
|
||||
memoizee.Memoized<() => Promise<IAddon[]>>;
|
||||
|
||||
private eventHandlers: Map<string, (event: IEvent) => void>;
|
||||
|
||||
constructor(
|
||||
{
|
||||
addonStore,
|
||||
@ -83,6 +85,7 @@ export default class AddonService {
|
||||
this.logger = getLogger('services/addon-service.js');
|
||||
this.tagTypeService = tagTypeService;
|
||||
this.eventService = eventService;
|
||||
this.eventHandlers = new Map();
|
||||
|
||||
this.addonProviders =
|
||||
addons ||
|
||||
@ -124,9 +127,11 @@ export default class AddonService {
|
||||
}
|
||||
|
||||
registerEventHandler(): void {
|
||||
SUPPORTED_EVENTS.forEach((eventName) =>
|
||||
this.eventService.onEvent(eventName, this.handleEvent(eventName)),
|
||||
);
|
||||
SUPPORTED_EVENTS.forEach((eventName) => {
|
||||
const handler = this.handleEvent(eventName);
|
||||
this.eventHandlers.set(eventName, handler);
|
||||
this.eventService.onEvent(eventName, handler);
|
||||
});
|
||||
}
|
||||
|
||||
handleEvent(eventName: string): (event: IEvent) => void {
|
||||
@ -349,6 +354,18 @@ export default class AddonService {
|
||||
}
|
||||
|
||||
destroy(): void {
|
||||
this.eventHandlers.forEach((handler, eventName) => {
|
||||
try {
|
||||
this.eventService.off(eventName, handler);
|
||||
} catch (error) {
|
||||
this.logger.debug(
|
||||
`Failed to remove event handler for ${eventName}:`,
|
||||
error,
|
||||
);
|
||||
}
|
||||
});
|
||||
this.eventHandlers.clear();
|
||||
|
||||
Object.values(this.addonProviders).forEach((addon) =>
|
||||
addon.destroy?.(),
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user