js

JS设计模式-发布订阅

2019-06-10  本文已影响0人  CRUD_科科

发布订阅

比如一个公众号可以被多个用户同时订阅,当公众号有新增内容时候,只要发布就好了,用户就能接收到最新的内容。发布和订阅两者毫无关联,先订阅后发布。

下面用发布订阅模式来实现获取多个异步请求结果:

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)
  }
})

是不是这样设计真的很舒服~

上一篇下一篇

猜你喜欢

热点阅读