js 发布订阅简易模型

PubSub.js:
// 用于消息的发布订阅 使用subscribe方法订阅,接受两个参数,第一个是关键字,第二个是callback,返回值为一个token,用于解除订阅
// 使用publish方法发布,可接受任意参数
// 当订阅的内容发生改变时,触发回调
// eventList:{
//  [name]:[
//    {token:token1, cb:callback1},
//    {token:token2, cb:callback2},
//  ...
//  ]
// }

function randomCode() {
    return Math.random().toString(32).substring(2);
}

class PubSub {
    constructor() {
        this.eventList = {};
    }
    subscribe(name, cb) {
        const eventList = this.eventList;
        const token = randomCode();
        if (!(name in eventList)) {
            eventList[name] = [];
        }
        if (typeof cb !== 'function') return;
        eventList[name].push({
            token,
            cb
        });
        return token;
    }
  

}
const pubsub = new PubSub();
export default pubsub;
import PubSub from './PubSub.js'
const token1 = PubSub.subscribe('name', data => {
    console.log('1', data);
});

const token2 = PubSub.subscribe('name', data => {
    console.log('2', data);
});

PubSub.publish('name', { title: '这是我订阅的消息' });

// 控制台输出 
// '1', { title: '这是我订阅的消息' }
// '2', { title: '这是我订阅的消息' }
// --------------------------------------------------------------------------------
// 取消订阅其中一个然后再次发布
PubSub.unsubscribe(token1);
PubSub.publish('name', { title: '这是我订阅的消息2' });

// 控制台输出
// '2', { title: '这是我订阅的消息2' }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容