-
先订阅好一件事 e.on 对象没有长度 可以使用Object.keys – Object.keys(obj).length
-
e.emit() // 发布
-
在微博上关注了A,同时其他很多人也关注了A,那么当A发布动态的时候,微博就会为你们推送这条动态
-
发布和订阅没有关系
-
观察者和被观察者有关系
-
观察者模式包含发布订阅
前面都是先订阅好事件,等事件可以触发后再执行触发。类似预售,先登记要买,等货备好了再卖给你。 能不能反过来?先发布,再订阅?
听起来,如果先发布了却找不到订阅者,就像一个发出的信号,如果没人回应,最终会消失掉。
所以开发的思路里,就要想方法存储这个发出的信号,等有人订阅的时候,那个人就把这个信号拿出来。
const fs = require('fs');
let school = {}
let e = { // events模块 vue $on $once $off
arr:[],
on(fn){ // 订阅 存方法
this.arr.push(fn); // redux
},
emit(){ // 发布 调用方法
this.arr.forEach(fn => fn());
}
}
e.on(()=>{ // 订阅
console.log('ok')
})
e.on(()=>{ // 订阅
if(Object.keys(school).length === 2){
console.log(school)
}
})
fs.readFile('name.txt','utf8',(err,data)=>{
school['name'] = data;
e.emit(); // 发布
});
fs.readFile('age.txt','utf8',(err,data)=>{
school['age'] = data;
e.emit();
});