发布 - 订阅模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。在 JavaScript开发中,我们一般用事件模型来替代传统的发布 - 订阅模式。
这是一种创建 松散耦合 代码的技术。它定义对象间 一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。
const fs = require('fs');
let obj = {};
class E{
constructor(){
this.releaseArr = []; // 存放订阅者的方法
}
on(fn){
this.releaseArr.push(fn); // 把订阅者要发送的东西存入到releaseArr数组中
}
emit(val){
console.log(val)
this.releaseArr.forEach(fn=>fn()); // 事件触发依次执行
}
}
let e = new E();
console.log(e.releaseArr);
e.on(()=>{
console.log("我是订阅")
});
e.on(()=>{
if(e.releaseArr.length == 2){
console.log(obj)
}
})
fs.readFile('./1.txt','utf8',function(err,data){
if(err) return;
obj['xxx'] = data;
e.emit("我是发布1号"); // 发射器 -- 调用依次存入到releaseArr中的事件
})
fs.readFile('./2.txt','utf8',function(err,data){
if(err) return;
obj['yyy'] = data;
e.emit("我是发布2号"); // 发射器
})

理解
村里分土地
张三去大队里问什么时候分地,村长说,手机号留下,回去等消息.
李四去大队里问什么时候分地,村长说,手机号留下,回去等消息.
王五去大队里问什么时候分地,村长说,手机号留下,回去等消息.
...
村里每户都留下了手机号,(订阅了分地的消息).等村长通知.
e.on(()=>{
console.log("分地就收到短信了")
})
村长等到(读取)了县里发通知了,时机到了,村长给每个人发短息了 (发布)
fs.readFile('某某县分地的通知.txt','utf8',(err,data)=>{
if(err) return
e.emit("村里分地了,大家都来吧");
})