我们假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信号,其他任务可以向信号中心"订阅"(subscribe)这个信号,从而知道什么时候自己可以开始执行。这就叫做"发布/订阅模式"(publish-subscribe pattern),又称"观察者模式"(observer pattern)。
设置"信号中心"
//event.js
//首先创建一个Event类
class Event {
constructor(options) {
this.handles = {}
}
on(eventName, callback) {
if (!this.handles[eventName]) {
this.handles[eventName] = [];
}
this.handles[eventName].push(callback);
}
emit(eventName) {
if (this.handles[arguments[0]]) {
for (var i = 0; i < this.handles[arguments[0]].length; i++) {
this.handles[arguments[0]][i](arguments[1]);
}
}
}
}
module.exports = Event
"发布"一个信号
//data.js
var Event = require('./event')
//new一个新的实例对象
const event = new Event()
const data = {
data: [],
set: function (dataList) {
//这里你可以设置想要的数据形式以数组为例
if (!dataList&& typeof (dataList) !== 'object' && dataList.constructor !== Array){
dataList= [dataList]
}
for (var item of dataList) {
event.emit('event-data', item)
}
},
}
module.exports = {
event: event,
}
"订阅"这个信号
//demo.js
var dataCenter = require('./data')
dataCenter.event.on('event-data', function (data) {
if (data) {
function fn(){
//处理
}
}
})
参考链接: 阮一峰 Javascript异步编程的4种方法