发布-订阅

let fs = require('fs');
// “发布“ -> 中间代理 <- “订阅“
//先声明一个函数
function Events(){ 
    this.callbacks = [];
    this.results = [];
}
//在  Events 的上新建一个 订阅函数 传递一个参数 参数也是一个函数
Events.prototype.on = function(callback){ // 订阅
    //将回调push  到  callbacks 数组中,这个数组是中间代理
    this.callbacks.push(callback);
}
// 新建一个发布函数 
Events.prototype.emit = function(data){ // 发布
    //将 数据传递到 results 数组中
    this.results.push(data);
    //遍历订阅 数组里面的回调 将结果传递过去
    this.callbacks.forEach(c=>c(this.results));
}
let e = new Events();
e.on(function(arr){
    if(arr.length === 3){
        console.log(arr);
    }
})
fs.readFile('./a.txt','utf8',function(err,data){ // 5s
    //传递数据到发布的函数 
    e.emit(data)
});
fs.readFile('./a.txt','utf8',function(err,data){ // 3s
    e.emit(data)
});
fs.readFile('./c.txt','utf8',function(err,data){ // 3s
    e.emit(data)
});

猜你喜欢

转载自www.cnblogs.com/guangzhou11/p/11318393.html