quasarframework/quasar · warning
Tried to remove listener for
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.
Solutions
- Confirm the event name exactly matches the one used in on()/once().
- Guard cleanup so off() runs only if a listener was registered.
- 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
- Track which listeners you registered and only off() those.
- Reuse one constant for on/off event names (avoid literal duplication).
- Guard against double cleanup in unmount hooks.
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
- Tried add listener but no event specified.
- Tried to remove listeners but no event specified.
- Connection with " " already exists. Disconnecting the…
- Error while triggering listener
- Received an out of order chunk.
AI-assisted analysis of quasarframework/quasar@4841521b5f (2026-08-30).
Data as JSON: /api/errors/cfb44ee37b2b910d.
Report an issue: GitHub.
Appendix: 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)