The Bnlang Event Emitter

The Event Emitter in Bnlang is a powerful pattern for handling asynchronous events.
Objects can emit named events, and other parts of the program can listen for those events with handlers.
This decouples event producers from consumers, making code modular and flexible.


Basic Usage

import { EventEmitter } from "bnlang:events";

const emitter = new EventEmitter();

// Listener
emitter.on("greet", (name) => {
  console.log("Hello,", name);
});

// Emit event
emitter.emit("greet", "Alice");

Multiple Listeners

An event can have multiple listeners. All of them will be called in the order they were registered.

emitter.on("data", (msg) => console.log("Listener 1:", msg));
emitter.on("data", (msg) => console.log("Listener 2:", msg));

emitter.emit("data", "Message here");
// Output:
// Listener 1: Message here
// Listener 2: Message here

Removing Listeners

You can remove a listener using .off or .removeListener.
This is useful when a listener is no longer needed.


Once Listeners

Use .once to register a listener that runs only the first time the event is emitted.

emitter.once("ping", () => console.log("Ping received!"));

emitter.emit("ping"); // Runs
emitter.emit("ping"); // Ignored

Best Practices

  • Remove listeners you no longer need to prevent memory leaks.
  • Use .once for events expected to occur only once.
  • Keep listener functions small and focused.
  • Use descriptive event names for clarity.