发布订阅
比如一个公众号可以被多个用户同时订阅,当公众号有新增内容时候,只要发布就好了,用户就能接收到最新的内容。发布和订阅两者毫无关联,先订阅后发布。
下面用发布订阅模式来实现获取多个异步请求结果:
let fs = require('fs');
let e = {
obj: {},
arr: [],
times: 0,
setTime(time) { // 设置执行几次
this.times = time;
},
on(fn) { // 订阅
this.arr.push(fn)
},
emit(key,value) { // 发布
this.obj[key] = value;
if(this.times === Object.keys(this.obj).length) {
this.arr.forEach(fn => fn(this.obj))
}
}
}
e.setTime(2);
e.on(function(data) {
console.log(data) // { name: '羊羊羊', age: '27' }
})
e.on(function() {
console.log('获取了所有数据')
})
fs.readFile('./name.txt', 'utf8', function(err, name) {
if(!err) {
e.emit('name', name)
}
})
fs.readFile('./age.txt', 'utf8', function (err, age) {
if (!err) {
e.emit('age', age)
}
})
是不是这样设计真的很舒服~
网友评论