美文网首页js
JS设计模式-发布订阅

JS设计模式-发布订阅

作者: CRUD_科科 | 来源:发表于2019-06-10 14:40 被阅读0次

    发布订阅

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

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

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

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

    相关文章

      网友评论

        本文标题:JS设计模式-发布订阅

        本文链接:https://www.haomeiwen.com/subject/mgqzxctx.html