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.