DEV Community

Discussion on: The Publisher/Subscriber Pattern in JavaScript - Simplified

Collapse
 
leandroandrade profile image
Leandro Andrade

Great article.

Another approach for unsubscribe is using Map, like this:

function PubSub() {
    const subscribers = {};

    function subscribe(eventName, callback) {
        if (!subscribers[eventName]) {
            subscribers[eventName] = new Map();
        }

        const key = `key${Math.random()}`;
        subscribers[eventName].set(key, callback);

        return {
            unsubscribe: () => subscribers[eventName].delete(key),
        };
    }

    function publish(eventName, data) {
        if (!subscribers[eventName]) return;
        subscribers[eventName].forEach(callback => callback(data));
    }

    return {
        subscribe,
        publish,
    };
}
Enter fullscreen mode Exit fullscreen mode