Appearance
取消订阅
javascript
eventBus.remove = function (key, fn) {
const fns = this.clientList[key]
// 如果 key 对应的消息没人订阅,直接返回。
if (!fns) {
return
}
if (!fn) {
// 如果没传入具体的 fn,表示取消 key 对应消息的所有订阅
fns.length = 0
} else {
// 取消具体订阅的 fn
for (let i = fns.length - 1; i >= 0; i--) { // 反向遍历,正向遍历删除后下标不能移动
const _fn = fns[i]
if (_fn === fn) {
fns.splice(i, 1)
}
}
}
}
// A 订阅消息
const fn1 = function (price, squareMeter) {
console.log(price, squareMeter)
}
salesOffices.listen('squareMeter88', fn1)
// B 订阅消息
salesOffices.listen('squareMeter88', function (price, squareMeter) {
console.log(price, squareMeter)
})
// 发布消息
salesOffices.trigger('squareMeter88', 2000000, 88)
salesOffices.remove('squareMeter88', fn1)
salesOffices.trigger('squareMeter88', 2000000, 88)