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