zoukankan      html  css  js  c++  java
  • 发布订阅案例讲解

    //发布 订阅 [fn,fn]靠着订阅的数组函数作为桥梁,发布与订阅没有关系,订阅的时候不知道什么时候发布,发布的时候也不知道订阅的了多少函数,订阅的时候数组里放函数
    //观察者者模式是基于发布订阅的模式
    //发布的事件函数
    function EventEmitter() {
    this._arr = [];//定义一个数组用来存储回调函数的
    }
    //原型上定义发布函数将回调函数都放在该发布数组中
    EventEmitter.prototype.on = function (cb) {
    this._arr.push(cb);
    }
    //定义发布的函数,用来执行数组中的回调函数
    EventEmitter.prototype.emit = function () {
    this._arr.forEach(fn => fn())
    }
    //定义发布事件的实例,用来订阅和发布
    let e = new EventEmitter();
    //订阅
    e.on(function () {
    console.log(1);
    });
    e.on(function () {
    console.log(2)
    });
    // 发布
    e.emit();
    输出结果如下:
     
     
    以上是有两个订阅函数一个发布函数执行两个订阅函数
    如下例子是俩发布函数订阅一个发布函数,代码如下:
    function EventEmitter() {
    this._arr = [];
    }
    let fs = require('fs')
    EventEmitter.prototype.on = function (cb) {
    this._arr.push(cb);
    }

    EventEmitter.prototype.emit = function () {
    this._arr.forEach(fn => fn.apply(this, arguments))//发布函数传参
    }
    let e = new EventEmitter();
    let teacher = {}
    // 定义发布函数
    e.on(function (key, value) {
    teacher[key] = value;
    if (Object.keys(teacher).length === 2) {
    console.log(teacher);
    }
    })
    fs.readFile("./a.txt", "utf8", function (err, data) {
    if (err) return console.log(err);
    //发布 执行发布函数
    e.emit('name', data)
    });
    fs.readFile("./b.txt", "utf8", function (err, data) {
    if (err) return console.log(err);
    //发布 执行发布函数
    e.emit('age', data)
    });
    a.txt 内容是:“along”;
    b.txt 内容是:"32
     
  • 相关阅读:
    hdu 2199 Can you solve this equation? 二分
    STL 学习代码~
    hdu 1551 Cable master 二分
    fzu 1564 Combination 组合数是否包含因数
    fafu 1079 帮冬儿忙 组合数包含因数个数
    soj 3290 Distribute The Apples I 组合数对素数取余
    fzu 2020 组合 组合数对素数取余
    hdu 1969 Pie 二分
    hdu 2141 Can you find it? 二分
    hdu 2899 Strange fuction 二分
  • 原文地址:https://www.cnblogs.com/zhx119/p/11474423.html
Copyright © 2011-2022 走看看