JSFiddle - React, Tailwind, and code Playground
by Augustus Yuan
JavaScript
'use strict'
var pubSub = {};
var topicsMap = {};
(function(obj) {
let id = -1;
obj.publish = function(topic, args) {
if (!topicsMap[topic]) {
return false;
}
let subscribers = topicsMap[topic],
length = subscribers ? subscribers.length : 0;
while (length--) {
subscribers[length].func(args);
}
return this;
};
obj.subscribe = function(topic, func) {
if (!topicsMap[topic]) {
topicsMap[topic] = [];
}
topicsMap[topic].push({
id: (++id),
func
});
return this;
};
obj.unsubscribe = function(topic) {
delete topicsMap[topic];
};
})(pubSub);
pubSub.subscribe('lol', function(args) {
console.log('hey 1');
});
pubSub.publish('lol', 'blarrgh');
pubSub.publish('rawr', 'blargh2');
console.log(topicsMap);
pubSub.subscribe('rawr', function(args) {
console.log(this);
});
pubSub.publish('rawr', 'hello', 'goodbye');
console.log(topicsMap);
pubSub.unsubscribe('lol');
console.log(topicsMap);
pubSub.subscribe('rawr', function(args) {
console.log('rawr 2');
});
pubSub.publish('rawr', 'hello', 'goodbye');
pubSub.publish('rawr', 'hello').publish('rawr', 'goodbye');