-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpubsub.js
More file actions
30 lines (25 loc) · 827 Bytes
/
pubsub.js
File metadata and controls
30 lines (25 loc) · 827 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
let subscriptions = Object.create(null);
function subscribe(evt, func) {
if(typeof func !== 'function') {
throw "Subscribers must be functions"
}
const oldSubscriptions = subscriptions[evt] || [];
oldSubscriptions.push(func);
subscriptions[evt] = oldSubscriptions;
}
function publish(evt) {
let args = Array.prototype.slice.call(arguments, 1);
const subFunctions = subscriptions[evt] || [];
for(let i = 0; i < subFunctions.length; i++) {
subFunctions[i].apply(null, args)
}
}
function unsubscribe(evt, func) {
const oldSubscriptions = subscriptions[evt] || [];
const newSubscriptions = oldSubscriptions.filter((item) => item !== func);
subscriptions[evt] = newSubscriptions;
}
function cancel(evt) {
delete subscriptions[evt];
}
module.exports = {subscribe, publish, unsubscribe, cancel}