JavaScript事件发布/订阅模式原理与用法分析


Posted in Javascript onAugust 21, 2018

本文实例讲述了JavaScript事件发布/订阅模式原理与用法。分享给大家供大家参考,具体如下:

1、发布/订阅模式也是诸多设计模式当中的一种;

2、这种方式可以在es5下相当优雅地处理异步操作;

3、什么是发布/订阅呢?我们举个栗子:

假设fn1,fn2,fn3都可以视作一个事件的发布者,执行它,就会发布一个事件。这个时候,我们可以通过一个事件的订阅者去批量订阅并处理这些事件,包括它们的先后顺序。增加一个消息订阅者的方法:

class AsyncFunArr {
 constructor (...arr) {
  this.funcArr = [...arr]
 }
 next () {
  const fn = this.funcArr.shift()
  if (typeof fn === 'function') fn()
 }
 run () {
  this.next()
 }
}

4、调用

//首先将fn1,fn2,fn3订阅
const asyncFunArr = new AsyncFunArr(fn1, fn2, fn3)
//fn1,fn2,fn3作为分布者分别调用其next()方法:
function fn1 () {
 console.log('Function 1')
 asyncFunArr.next()
}
function fn2 () {
 setTimeout(() => {
  console.log('Function 2')
  asyncFunArr.next()
 }, 500)
}
function fn3 () {
 console.log('Function 3')
 asyncFunArr.next()
}

5、输出:

// Function 1
// Function 2
// Function 3

6、总结:

通过上述方法,可以实现很多,如异步请求数据等。

7、参考资料:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/constructor

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
Mar 22 Javascript
javascript 触发事件列表 比较不错
Sep 03 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
Aug 28 Javascript
js验证身份证号有效性并提示对应信息
Oct 19 Javascript
jQuery Chart图表制作组件Highcharts用法详解
Jun 01 Javascript
JS修改地址栏参数实例代码
Jun 14 Javascript
jQuery选择器实例应用
Jan 05 Javascript
20行js代码实现的贪吃蛇小游戏
Jun 20 Javascript
Angular中ng-options下拉数据默认值的设定方法
Jun 21 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
Jul 13 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
May 22 Javascript
浅谈一种让小程序支持JSX语法的新思路
Jun 16 Javascript
javascript和php使用ajax通信传递JSON的实例
Aug 21 #Javascript
小程序开发基础之view视图容器
Aug 21 #Javascript
详解微信小程序的 request 封装示例
Aug 21 #Javascript
Mint-UI时间组件起始时间问题及时间插件使用
Aug 20 #Javascript
vue监听对象及对象属性问题
Aug 20 #Javascript
微信小程序中使用自定义图标(阿里icon)的方法
Aug 20 #Javascript
Vue插件打包与发布的方法示例
Aug 20 #Javascript
You might like
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
PHP MSSQL 存储过程的方法
2008/12/24 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
Python Web服务器Tornado使用小结
2014/05/06 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
防沙治沙典型材料
2014/05/07 职场文书
工会工作先进事迹
2014/08/18 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP
Python使用MapReduce进行简单的销售统计
2022/04/22 Python