发布-订阅
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)
});
越努力越幸运

浙公网安备 33010602011771号