koa洋葱模型实现核心原理解析

48 阅读1分钟
const middlewares = [
  async function(ctx, next) {
    console.log(ctx);
    await next();
    console.log(1);
  },
  async function(ctx, next) {
    console.log(ctx);
    await next();
  }
];

function promis(middlewares) {

  return function (context, next) {
    let index = -1;
    return dispatch(0);

    function dispatch(i) {
      index = i;
      let fn = middlewares[i];
      if (i === middlewares.length) fn = next;
      if (!fn) return Promise.resolve();

      return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));
    }
  }

}

const p = promis(middlewares);
p({name: 'li'});