Js异步编程之发布/订阅模式【观察者模式】

我们假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(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种方法

你可能感兴趣的:(Js异步编程之发布/订阅模式【观察者模式】)