Ömer Şengül

createEventEmitter

byÖmer ŞengülCreated February 25, 2026 at 04:54 PM
createEventEmitter
1const createEventEmitter = () => {
2  let listeners = {};
3
4  const on = (event, callback) => {
5    if (!listeners[event]) listeners[event] = [];
6    listeners[event] = [...listeners[event], callback];
7  };
8
9  const off = (event, callback) => {
10    if (!listeners[event]) return;
11    listeners[event] = listeners[event].filter((cb) => cb !== callback);
12  };
13
14  const once = (event, callback) => {
15    const wrapper = (...args) => {
16      callback(...args);
17      off(event, wrapper);
18    };
19    on(event, wrapper);
20  };
21
22  const emit = (event, ...args) => {
23    if (!listeners[event]) return;
24    listeners[event].forEach((cb) => cb(...args));
25  };
26
27  const clear = (event) => {
28    if (event) delete listeners[event];
29    else listeners = {};
30  };
31
32  return { on, off, once, emit, clear };
33};
34
35// Kullanım
36const emitter = createEventEmitter();
37
38const onLogin = (user) => console.log(`User logged in: ${user}`);
39
40emitter.on("login", onLogin);
41emitter.once("login", (user) => console.log(`Welcome message sent to ${user}`));
42
43emitter.emit("login", "ahmet"); // ikisi de çalışır
44emitter.emit("login", "mehmet"); // once artık çalışmaz
45
46emitter.off("login", onLogin);
47emitter.emit("login", "ali"); // hiçbir şey olmaz

Description

A minimal event emitter implementation. Supports subscribing, unsubscribing, and emitting custom events — similar to how Node.js EventEmitter works under the hood.

Discussion (0)

Sort by: