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中的原型链深入理解
Feb 24 Javascript
一个简单的jquery的多选下拉框(自写)
May 05 Javascript
容易造成JavaScript内存泄露几个方面
Sep 04 Javascript
JavaScript中常用的六种互动方法示例
Mar 13 Javascript
js为什么不能正确处理小数运算?
Dec 29 Javascript
JavaScript中split与join函数的进阶使用技巧
May 03 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
Nov 30 Javascript
vue.js实现仿原生ios时间选择组件实例代码
Dec 21 Javascript
node.js支持多用户web终端实现及安全方案
Nov 29 Javascript
在Web关闭页面时发送Ajax请求的实现方法
Mar 07 Javascript
JavaScript中将值转换为字符串的五种方法总结
Jun 06 Javascript
JavaScript中使用Spread运算符的八种方法总结
Jun 18 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数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
基于python实现微信模板消息
2015/12/21 Python
python实现批量命名照片
2020/06/18 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
中国跨境电商:Tomtop
2017/03/16 全球购物
犯错检讨书
2014/02/21 职场文书
公司开业庆典主持词
2014/03/21 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
教师教育教学随笔
2015/08/15 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python