mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-15 05:37:32 +00:00
fix(infra): memory leak (#9013)
This commit is contained in:
@@ -48,16 +48,16 @@ export class EventBus {
|
||||
this.listeners[event.id].push(listener);
|
||||
const off = this.parent?.on(event, listener);
|
||||
return () => {
|
||||
this.off(event, listener);
|
||||
off?.();
|
||||
this.off(event.id, listener);
|
||||
};
|
||||
}
|
||||
|
||||
off<T>(event: FrameworkEvent<T>, listener: (event: T) => void) {
|
||||
if (!this.listeners[event.id]) {
|
||||
private off(eventId: string, listener: (event: any) => void) {
|
||||
if (!this.listeners[eventId]) {
|
||||
return;
|
||||
}
|
||||
this.listeners[event.id] = this.listeners[event.id].filter(
|
||||
this.listeners[eventId] = this.listeners[eventId].filter(
|
||||
l => l !== listener
|
||||
);
|
||||
}
|
||||
@@ -76,6 +76,15 @@ export class EventBus {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
for (const eventId of Object.keys(this.listeners)) {
|
||||
for (const listener of this.listeners[eventId]) {
|
||||
this.parent?.off(eventId, listener);
|
||||
}
|
||||
}
|
||||
this.listeners = {};
|
||||
}
|
||||
}
|
||||
|
||||
interface EventHandler {
|
||||
|
||||
@@ -130,6 +130,7 @@ export class ComponentCachePool {
|
||||
}
|
||||
}
|
||||
}
|
||||
this.cache.clear();
|
||||
}
|
||||
|
||||
[Symbol.dispose]() {
|
||||
@@ -318,5 +319,6 @@ export class BasicFrameworkProvider extends FrameworkProvider {
|
||||
}
|
||||
this.disposed = true;
|
||||
this.cache.dispose();
|
||||
this.eventBus.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user