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 相关文章推荐
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
Dec 25 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
Aug 07 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
Nov 25 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
Jan 11 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
jQuery焦点图切换特效插件封装实例
Aug 18 Javascript
javascript文本框内输入文字倒计数的方法
Feb 24 Javascript
HTML页面定时跳转方法解析(2种任选)
Dec 22 Javascript
js实现微博发布小功能
Jan 12 Javascript
JavaScript条件判断_动力节点Java学院整理
Jun 26 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
JS数组splice操作实例分析
Oct 12 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
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP echo()函数讲解
2019/02/15 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
python读写二进制文件的方法
2015/05/09 Python
举例讲解Python中的算数运算符的用法
2015/05/13 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
市场营销方案范文
2014/03/11 职场文书
合作意向书范本
2014/03/31 职场文书
安全生产演讲稿
2014/05/09 职场文书
大学生求职信怎么写
2015/03/19 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang
总结Python连接CS2000的详细步骤
2021/06/23 Python
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
Windows server 2012搭建FTP服务器
2022/04/29 Servers
css3 选择器
2022/05/11 HTML / CSS