Skip to content

EventBus

runtoolkit edited this page Apr 13, 2026 · 1 revision

EventBus

Named event system. Supports multiple handlers per event, sync and async dispatch, deferred (queued) fire, and once-handlers.

Constructor

import { EventBus } from './src/event.js';

const bus = new EventBus();
bus.setDebug(true); // logs register/fire to console

Registering handlers

// Persistent handler — returns an unregister function
const off = bus.register('player_join', (ctx) => {
  console.log('joined:', ctx.name);
});

// One-shot handler — automatically removed after first fire
bus.register('first_boot', () => {
  console.log('fired once');
}, { once: true });

// Unregister
off();                            // via returned function
bus.unregisterOne('player_join', fn); // by name + reference
bus.unregister('player_join');    // removes all handlers for event
bus.clear();                      // removes everything + clears queue

Firing events

// Sync — fires all handlers immediately
bus.fire('player_join', { name: 'Alice' });
// → { ok: true, count: number }

// Async — awaits each handler in sequence
await bus.fireAsync('player_join', { name: 'Alice' });
// → { ok: true, count: number }

// Queued — deferred until flushQueue() is called
bus.fireQueued('player_join', { name: 'Alice' });

Flushing the queue

bus.flushQueue();       // sync — calls fire() for each queued item
await bus.flushQueueAsync(); // async — calls fireAsync() for each

bus.clearQueue();       // discard without firing

Introspection

bus.has('player_join');       // true if at least one handler registered
bus.count('player_join');     // number of handlers
bus.list();                   // → ['player_join', 'other_event', ...]

Error handling

Errors thrown inside handlers are caught and logged to console.error. Other handlers in the same fire() call are not affected.

Clone this wiki locally