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 当前日期转化为中文的实现代码
May 13 Javascript
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
javascript语言结构小记(一)
Sep 10 Javascript
javascript封装的sqlite操作类实例
Jul 17 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
Nov 25 Javascript
jQuery网页定位导航特效实现方法
Dec 19 Javascript
javascript使用btoa和atob来进行Base64转码和解码
Mar 20 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
Apr 19 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 Javascript
es6函数之尾递归用法实例分析
Apr 25 Javascript
js实现跳一跳小游戏
Jul 31 Javascript
JavaScript setTimeout()基本用法有哪些
Nov 04 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
一些关于PHP的知识
2006/11/17 PHP
深入php处理整数函数的详解
2013/06/09 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
服务行业个人求职的自我评价
2013/12/12 职场文书
公积金单位接收函
2014/01/11 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
中学社团活动总结
2015/05/07 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android
Python各协议下socket黏包问题原理
2022/04/12 Python
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript