发布-订阅模式,发布和订阅两者本身没有关系,通过媒介来触发事件。
如下通过on方法向中间数组中添加订阅函数,当发布emit时,回调中间数组中的方法。

ES5 语法实现

  1. let fs = require('fs'); // fileSystem
  2. //发布 订阅[fn,fn]
  3. //事件派发器
  4. function EventEmitter() {
  5. this._arr = [];
  6. }
  7. EventEmitter.prototype.on = function (callback) { // 订阅
  8. this._arr.push(callback);//this._arr = [fn, fn]
  9. }
  10. EventEmitter.prototype.emit = function () { //发布 发布时 需要让 on 的方法依次执行
  11. this._arr.forEach(fn => fn.apply(this, arguments))
  12. }
  13. let e = new EventEmitter();
  14. let school = {};
  15. e.on(function (data, key) {
  16. console.log('一个接口成功');
  17. })
  18. e.on(function (data, key) {
  19. school[key] = data;
  20. if (Object.keys(school).length === 2) {
  21. console.log(school);//{ name: '锐捷', age: '18' }
  22. }
  23. })
  24. fs.readFile('./promise/name.txt', 'utf8', function (err, data) {
  25. if (err) return console.log(err);
  26. e.emit(data, 'name');
  27. });
  28. fs.readFile('./promise/age.txt', 'utf8', function (err, data) {
  29. if (err) return console.log(err);
  30. e.emit(data, 'age');
  31. });