首页
学习
关于
友链
Search
1
小程序 蓝牙连接(出现的问题和一些解决方法)
229 阅读
2
一些 javaScript、CSS 的优雅使用
78 阅读
3
PicGo+GitHub搭建个人图床
66 阅读
4
网站变灰
45 阅读
5
致未来的我
41 阅读
全部
感想
旅行
生活
学习
登录
Search
标签搜索
css
javascript
jquery
html
小程序
github
图床
假期
发布订阅
typecho
第一次
未来
快乐与忧伤
努力
奋斗
PicGo
倒计时
元旦
svg
vue
逸曦穆泽
累计撰写
35
篇文章
累计收到
1
条评论
首页
栏目
全部
感想
旅行
生活
学习
页面
学习
关于
友链
搜索到
2
篇与
发布订阅
的结果
2022-05-26
js 发布订阅2
在小程序中使用到这个发布订阅模式,由于要实时传递设备返回来的数值使用到eventbus.js://创建EventBus对象 let EventBus = function () { console.log("eventbus init..."); }; //准备数组容器 var objBus = [], arrbus = []; //添加方法 EventBus.prototype = { obj: { set: function (key, action) { if (key && action) { var map = {}; map.k = key; map.v = action; //如果存在,则删除之前添加的事件 for (var i = 0, busLength = objBus.length; i < busLength; i++) { var tempMap = objBus[i]; if (tempMap.k == key) { objBus.splice(i, 1); } } objBus.push(map); } }, get: function (key) { if (key) { for (var i = 0, busLength = objBus.length; i < busLength; i++) { var map = objBus[i]; if (map.k == key) { return map.v(); } } } } }, emit: function (key, data) { if (key) { for (var i = 0, busLength = arrbus.length; i < busLength; i++) { var map = arrbus[i]; if (map.k == key) { return map.v(data); } } } return new Promise((resolve, reject) => { resolve() }) }, on: function (key, action) { if (key && action) { var map = {}; map.k = key; map.v = action; arrbus = arrbus.filter(item=>item.k!=key);//去掉重复 arrbus.push(map); } }, arr: { push: function (key, action) { if (key && action) { var map = {}; map.k = key; map.v = action; arrbus.push(map); } }, pop: function (key) { if (key) { for (var i = 0, busLength = arrbus.length; i < busLength; i++) { var map = arrbus[i]; if (map.k == key) { map.v(); } } } } } } var eventBus = new EventBus() module.exports = { eventBus: eventBus }发布者index.jslet data = ""; let num = 0; setInterval(function() { num++; data = "实时数据"+num; }, 1000); bus.emit('obj',data) // 带参数样式bus.emit('join',##)订阅者home.jsbus.on('obj', (data) => { console.log("返回数据",data) })
2022年05月26日
8 阅读
0 评论
0 点赞
2022-05-12
js 发布订阅
发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。发布的消息分为不同的类别,无需了解哪些订阅者的存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者的存在。2.发布者和订阅者不用互相知道,通过第三方实现调度,属于经过解耦合的观察者模式 /** * 发布订阅模式 * handles: 事件处理函数集合 * on: 订阅事件 * emit: 发布事件 * off: 删除事件 **/ class EventBus { constructor() { this.handles = {}; } // 订阅事件 on (eventType, handle) { if (!this.handles.hasOwnProperty(eventType)) { this.handles[eventType] = []; } if (typeof handle == 'function') { this.handles[eventType].push(handle); } else { throw new Error('缺少回调函数'); } return this; } // 发布事件 emit (eventType, ...args) { if (this.handles.hasOwnProperty(eventType)) { this.handles[eventType].forEach((item, key, arr) => { item.apply(null, args); }) } else { throw new Error(`"${eventType}"事件未注册`); } return this; } // 删除事件 off (eventType, handle) { if (!this.handles.hasOwnProperty(eventType)) { throw new Error(`"${eventType}"事件未注册`); } else if (typeof handle != 'function') { throw new Error('缺少回调函数'); } else { this.handles[eventType].forEach((item, key, arr) => { if (item == handle) { arr.splice(key, 1); } }) } return this; // 实现链式操作 } } // 下面的一些操作 let eventBus = new EventBus(); eventBus.on('key', (...args) => { console.log(args.join(' ')); }) eventBus.on('key', 'ni hao ma'); eventBus.emit('key', 'hao', 'tian', 'zhen'); eventBus.off('key', 'ni hao ma'); eventBus.emit('key', 'hao', 'tian', 'zhen');这个暂时还没用到,下次记录一个用到的
2022年05月12日
9 阅读
0 评论
0 点赞