From 84d8ccf83b3ed0c03b5189d2caaea1f5e6d7d07f Mon Sep 17 00:00:00 2001 From: gchust Date: Wed, 16 Apr 2025 10:10:12 +0800 Subject: [PATCH] chore: api update --- packages/core/client/src/eventflow/event-bus.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/core/client/src/eventflow/event-bus.ts b/packages/core/client/src/eventflow/event-bus.ts index 2bc4587051..3ccf0cef68 100644 --- a/packages/core/client/src/eventflow/event-bus.ts +++ b/packages/core/client/src/eventflow/event-bus.ts @@ -63,10 +63,21 @@ export class EventBus { return this.on(eventName, listener, { ...options, once: true }); } + /** + * Removes an event listener or all listeners for eventName + */ + off(eventName: string | string[], listener?: EventListener): void { + if (Array.isArray(eventName)) { + eventName.forEach((name) => this.singleOff(name, listener)); + } else { + this.singleOff(eventName, listener); + } + } + /** * Removes an event listener or all listeners for an event */ - off(eventName: string, listener?: EventListener): void { + private singleOff(eventName: string, listener?: EventListener): void { // Check if this is a wildcard pattern const isWildcard = eventName.includes('*'); const listenersMap = isWildcard ? this.patternListeners : this.listeners; @@ -152,7 +163,7 @@ export class EventBus { listenersMap.get(eventName).push(registeredListener); // Return unsubscribe function - return () => this.off(eventName, listener); + return () => this.singleOff(eventName, listener); } /** @@ -211,7 +222,7 @@ export class EventBus { const result = listener(ctx); // Handle async listeners - if (result instanceof Promise) { + if (result instanceof Promise && options.blocking) { await result; }