愚墨的博客
  • 首页
  • 前端技术
  • 面试
只争朝夕不负韶华
  1. 首页
  2. Nodejs
  3. 正文

简单中间件的实现

2018年03月17日 3532点热度 0人点赞 0条评论

简易版实现中几点必须的操作:

  • 一个array middleList 来存储中间件
  • 执行中间件的操作,循环 middleList 将每一项执行,或者使用shift 将切出的每一项执行
  • 有next 、 done 函数
  • 初始执行next
class MiddleWare {
  constructor(data) {
    this.data = data;
    this.middleList = [];
    this.next = this.next.bind(this)
    this.done = this.done.bind(this)
  }
  use(middle) {
    if (typeof middle !== 'function') {
      throw 'middle is not a function'
      return;
    }
    this.middleList.push(middle)
  }
  next() {
    if (this.middleList.length > 0) {
      let cur = this.middleList.shift();
      cur(this.data, this.next, this.done)
    } else {
      this.done()
    }
  }
  done() {
    this.middleList = [];
    console.log('全部执行完毕');
  }
}


const fn1 = (data, next, done) => {
  console.log('this is fn1', data);
  setTimeout(() => {
    next();
  }, 2000);
}
const fn2 = (data, next, done) => {
  console.log('this is fn2', data);
  // done()
  next();
}
const fn3 = (data, next, done) => {
  console.log('this is fn3', data);
  next();
}

const data = '123'
// 传入参数
let list = new MiddleWare(data);
list.use(fn1)
list.use(fn2)
list.use(fn3)
list.next()

 

标签: 暂无
最后更新:2019年03月19日

愚墨

保持饥渴的专注,追求最佳的品质

点赞
< 上一篇
下一篇 >

文章评论

取消回复

搜搜看看
历史遗迹
  • 2023年5月
  • 2022年9月
  • 2022年3月
  • 2022年2月
  • 2021年12月
  • 2021年8月
  • 2021年7月
  • 2021年5月
  • 2021年4月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年9月
  • 2020年7月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年1月
  • 2019年5月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年9月
  • 2018年3月
  • 2018年2月
  • 2018年1月
  • 2017年11月
  • 2017年7月
  • 2017年6月
  • 2017年3月
  • 2017年2月
  • 2017年1月
  • 2016年12月
  • 2016年11月
  • 2016年9月
  • 2016年8月
  • 2016年7月
  • 2016年6月
  • 2016年5月
  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年10月
  • 2015年9月
  • 2015年7月
  • 2015年6月
  • 2015年4月

COPYRIGHT © 2020 愚墨的博客. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS