Pub/Sub Pattern

A simple publish/subscribe implementation from Addy Osmani!

HTML

<select class="form-control input-sm" id="universe">
            <option selected value="1">Peers</option>
            <option value="2">Public</option>

        </select>

JavaScript

var pubsub = {};

(function (q) {
    var topics = {},
    subUid = -1;

    q.publish = function (topic, args) {
        if (!topics[topic]) {
            return false;
        }

        var subscribers = topics[topic],
            len = subscribers ? subscribers.length : 0;

        while (len--) {
            subscribers[len].func(topic, args);
        }

        return this;
    };

    q.subscribe = function (topic, func) {
        if (!topics[topic]) {
            topics[topic] = [];
        }

        var token = (++subUid).toString();
        topics[topic].push({
            token: token,
            func: func
        });

        return token;
    };

    q.unsubscribe = function (token) {
        for (var m in topics) {
            if (topics[m]) {
                for (var i = 0, j = topics[m].length; i < j; i++) {
                    if (topics[m][i].token === token) {
                        topics[m].splice(i,1);
                        return token;
                    }
                }
            }
        }
        return this;
    };

})(pubsub);

// Now, using the above code...

var messageLogger = function(topics, data) {
    console.log('Logging: ' + topics + ': ' + data);
};

var subscriptionA = pubsub.subscribe('inbox/newMessage', messageLogger);

var subscriptionB = pubsub.subscribe('inbox/newMessage', messageLogger);

pubsub.subscribe('test',()=>{alert(123)});
pubsub.publish('test','aaa')

pubsub.publish('inbox/newMessage', 'hello, world!');
pubsub.publish('inbox/newMessage', 'are you out there?!');
pubsub.publish('inbox/newMessage', 'goodbye, cruel world...');
console.log(subscriptionB.token);