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 按回车键相应按钮提交事件
Nov 02 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
Node.js中的流(Stream)介绍
Mar 30 Javascript
举例讲解JavaScript中关于对象操作的相关知识
Nov 16 Javascript
jQuery插件 Jqplot图表实例
Jun 18 Javascript
jQuery使用getJSON方法获取json数据完整示例
Sep 13 Javascript
基于jQuery实现文字打印动态效果
Apr 21 jQuery
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
JavaScript函数apply()和call()用法与异同分析
Aug 10 Javascript
对layer弹出框中icon数字参数的说明介绍
Sep 04 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
Nov 01 Javascript
在vue中使用image-webpack-loader实例
Nov 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
php max_execution_time执行时间问题
2011/07/17 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
Laravel定时任务的每秒执行代码
2019/10/22 PHP
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
浅谈Python的垃圾回收机制
2016/12/17 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
个性大学生自我评价
2013/12/04 职场文书
学校采购员岗位职责
2014/01/02 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
公司股权转让协议书
2014/04/12 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
Python必备技巧之函数的使用详解
2022/04/04 Python
CSS实现鼠标悬浮动画特效
2023/05/07 HTML / CSS