yaogengzhu / Learning-notes

基础回顾、笔记
1 stars 0 forks source link

发布订阅初探 #8

Open yaogengzhu opened 4 years ago

yaogengzhu commented 4 years ago

发布订阅初探

class Chat {
    constructor() {
        this.clientEvent = {}
    }

    subscribe(key, fn) {
        if (!this.clientEvent[key]) {
            this.clientEvent[key] = [] // 创建一个缓存列表
        }
        this.clientEvent[key].push(fn)  // 加入缓存列表中
    }

    dispatch(data = { key: '', data: {} }) {
        const fns = this.clientEvent[data.key]
        if (!fns && fns.length === 0) {
            return
        }
        fns.forEach(fn => fn(data.data))
    }
}

let chat = new Chat()
module.exports = chat

// 调用

const chat = require('./subscribe.js')

// 先写订阅的事件
chat.subscribe('send', function(data) {
    console.log('小明给我发消息来, 对我说: ' + data.name)
})

chat.dispatch({
    key: 'send',
    data: {
        name: 'yaogeng, 您好',
        age: 26
    }
})

chat.dispatch({
    key: 'send',
    data: {
        name: 'yaogeng, 您好哦!',
        age: 26
    }
})
chat.dispatch({
    key: 'send',
    data: {
        name: 'yaogeng, 我知道了哦',
        age: 26
    }
})