发布订阅
定义:发布订阅模式定义了对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都将得到通知。
- PubSub:包含所有功能的订阅/发布消息的管理者
- PubSub.subscribe(msg, subscriber):订阅消息,指定消息名和订阅者回调函数
- PubSub.publish(msg, data):发布消息,指定消息名和数据
- PubSub.unsubscribe(flag):取消订阅,根据标识取消某个或某些消息的订阅
javascript
const PubSub = {
id: 1,
callbacks: {
// pay: {
// token_1: fn1
// token_2: fn2
// }
}
}
// 订阅
PubSub.subscribe = function (channel, callback) {
// 唯一编号
let token = 'token_' + this.id++;
// 判断callbacks是否存在channel
if (this.callbacks[channel]) {
this.callbacks[channel][token] = callback;
} else {
this.callbacks[channel] = {
[token]: callback
}
}
return token;
}
// 发布
PubSub.publish = function (channel, callback) {
// 获取当前频道的所有回调,遍历执行
if (this.callbacks[channel]) {
Object.values(this.callbacks[channel]).forEach(callback => {
callback(data)
})
}
}
// 取消订阅(根据token)
PubSub.unsubscribe = function (flag) {
if (!flag) {
this.callbacks = {}
} else if (typeof flag === 'string') {
if (flag.includes('token')) {
const callbackobj = Object.values(this.callbacks).find(obj => obj.hasOwnProperty(flag))
}
if (callbackobj) {
delete callbackobj[flag]
}
} else {
delete this.callbacks[flag]
}
}