发布订阅自己的一次理解

  • 先订阅好一件事 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();
}); 

有更多更好的观点爸爸们请发言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值