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);