发布-订阅模式,发布和订阅两者本身没有关系,通过媒介来触发事件。
如下通过on方法向中间数组中添加订阅函数,当发布emit时,回调中间数组中的方法。
ES5 语法实现
let fs = require('fs'); // fileSystem//发布 订阅[fn,fn]//事件派发器function EventEmitter() {this._arr = [];}EventEmitter.prototype.on = function (callback) { // 订阅this._arr.push(callback);//this._arr = [fn, fn]}EventEmitter.prototype.emit = function () { //发布 发布时 需要让 on 的方法依次执行this._arr.forEach(fn => fn.apply(this, arguments))}let e = new EventEmitter();let school = {};e.on(function (data, key) {console.log('一个接口成功');})e.on(function (data, key) {school[key] = data;if (Object.keys(school).length === 2) {console.log(school);//{ name: '锐捷', age: '18' }}})fs.readFile('./promise/name.txt', 'utf8', function (err, data) {if (err) return console.log(err);e.emit(data, 'name');});fs.readFile('./promise/age.txt', 'utf8', function (err, data) {if (err) return console.log(err);e.emit(data, 'age');});
