quasarframework/quasar · warning

Tried to remove listener for "${event}" event but there is n

Error message

Tried to remove listener for "${event}" event but there is no such listener attached.

What it means

BexBridge.off(event, callback) was called for an event name that has no listeners registered at all. The bridge warns and returns without changes.

Source

Thrown at app-vite/exports/bex/private/bex-bridge.js:310

    const target = (this.listeners[event] ||= [])
    target.push({ type: 'once', callback })
    this.log(`Added a one-time listener for event: "${event}".`)
  }

  /**
   * @param {string} event
   * @param {(message: Message) => void} callback
   */
  off(event, callback) {
    if (!event) {
      this.warn('Tried to remove listeners but no event specified.')
      return
    }

    const list = this.listeners[event]

    if (list === void 0) {
      this.warn(
        `Tried to remove listener for "${event}" event but there is no such listener attached.`
      )
      return
    }

    if (callback === void 0) {
      if (event.startsWith('@quasar:')) {
        // ensure we don't remove internal listeners
        this.listeners[event] = [list[0]]
      } else {
        delete this.listeners[event]
      }

      this.log(`Stopped listening for "${event}".`)
      return
    }

    if (typeof callback !== 'function') {

View on GitHub (pinned to 4841521b5f)

Solutions

  1. Confirm the event name exactly matches the one used in on()/once().
  2. Guard cleanup so off() runs only if a listener was registered.
  3. Track registration state to avoid removing twice.

Example fix

// before
bridge.on('app-opened', handler)
bridge.off('appOpened', handler) // mismatch
// after
const EVENT = 'app-opened'
bridge.on(EVENT, handler)
bridge.off(EVENT, handler)
Defensive patterns

Strategy: validation

Validate before calling

if (registeredEvents.has(event)) {
  bridge.off(event, handler)
  registeredEvents.delete(event)
}

Type guard

const canRemove = (event) => typeof event === 'string' && registeredEvents.has(event)

Prevention

When it happens

Trigger: Removing a listener that was never added (typo in event name), or calling off() after the listener already fired (for once-type) or was already removed.

Common situations: Case/typo mismatch between on('Data') and off('data'); double cleanup (both a watcher and unmount hook call off); off() for an event registered only in the other side of the bridge.

Related errors


AI-assisted analysis of quasarframework/quasar@4841521b5f (2026-08-30). Data as JSON: /api/errors/cfb44ee37b2b910d. Report an issue: GitHub.