美文网首页js底层原理
js 发布订阅模式

js 发布订阅模式

作者: 钢琴__ | 来源:发表于2019-11-19 19:27 被阅读0次

发布订阅模式:订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Topic),当发布者(Publisher)发布该事件(Publish topic)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码。
代码示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        #div1,#div2{
            width: 200px;
            height: 100px;
            background-color: blanchedalmond;
            margin: 10px;
        }s
    </style>
</head>
<body>
    <div id="div1"></div>
    <div id="div2"></div>
    <button onclick={sc()}>触发</button>
<script>
function sc() {
    psc.publish('p1', Date.now());
    psc.publish('p2', Date.now());
    psc.publish('p1', Date.now());
}

class PubSubCenter {
    topics = new Set();

    publish(topic, args) {
        console.log(topic, args);
        if (!this.topics[topic]) {
            return;
        }

        this.topics[topic].forEach(item => {
            item.fn(item, args);
        });
    }

    subscribe(topic, fn) {
        this.topics[topic] = this.topics[topic] || [];
        this.topics[topic].push({
            topic,
            fn
        })
    }

    unSubScribe(topic) {
        this.topics.delete(topic)
    }
}

var psc = new PubSubCenter();

var a = (topics, data) => {
    document.getElementById('div1').innerHTML = `${JSON.stringify(topics)} 接收事件了,数据是${data}`;
    console.log(`${JSON.stringify(topics)} 接收事件了,数据是${data}`);
}

var b = (topics, data) => { 
    document.getElementById('div2').innerHTML = `${topics.topic} 接收事件了,数据是${data}, 订阅者2`;
    console.log(`${topics.topic} 接收事件了,数据是${data}, 订阅者2`) 
};

var psc1 = psc.subscribe('p1', a);
var psc2 = psc.subscribe('p2', b);


</script>
</body>
</html>

相关文章

  • JS发布-订阅模式

    发布-订阅模式广泛应用于异步编程中,这是一种替代传递回调函数的方案。 现实中的例子: 小明想买房,到了售楼处被告知...

  • js 发布订阅模式

    发布订阅模式:订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Topic),...

  • 一份头条前端面试准备[整理稿]

    JS打乱数组 JS ajax JS bind 实现 懒加载 JS实现promise JS发布订阅模式 JSONP ...

  • 手写简单的vue双向绑定

    JS:仿vue数据初始化 核心:发布订阅者模式

  • 多异步之间的协作

    《深入浅出 Node.js》阅读随笔 Node.js 的中发布/订阅模式,一般用于解决一次发布对应多次订阅的情况。...

  • JS设计模式--发布/订阅模式

    一、前言 JS语言的执行环境是“单线程”,所以任务是一个一个进行执行,如果任务多就需要排队。如果任务多,浏览器加载...

  • 【JS基础】订阅发布模式

    最 新:https://www.zybuluo.com/c-Ku/note/934090 代码示例

  • js实现发布订阅模式

    发布订阅模式指的是希望接收通知的对象(Subscriber)基于一个主题通过自定义事件订阅主题,被激活事件的对象(...

  • JS设计模式-发布订阅

    发布订阅 比如一个公众号可以被多个用户同时订阅,当公众号有新增内容时候,只要发布就好了,用户就能接收到最新的内容。...

  • JS实现发布—订阅模式

    发布-订阅模式中存在三种角色,发布者、订阅者,二者彼此不知道对方的存在,需要通过第三者,即消息队列来建立联系。这和...

网友评论

    本文标题:js 发布订阅模式

    本文链接:https://www.haomeiwen.com/subject/oougictx.html