发布-订阅模式,发布和订阅两者本身没有关系,通过媒介来触发事件。
如下通过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');
});