Javascript简单实现middleware

2017-09-19  本文已影响30人  梁王io

前言

自己遇到的一个面试题,感觉挺有趣的。

实现效果(需求)

完成fun函数

function fun1(ctx, next) {
  ctx.index++;
  next();
}
function fun2(ctx, next) {
  setTimeout(function() {
    ctx.index++;
    next();
  }, 1000);
}
function fun3(ctx, next) {
  ctx.index++;
}

function fun() {
}
var obj = {index:0}
fun([fun1,fun2,fun3], obj) //按fun1,fun2,fun3的顺序,遇到next到下一个函数。最后对象的index应该是3 

实现代码

function fun1(ctx, next) {
  ctx.index++;
  console.log(1);
  next();
}
function fun2(ctx, next) {
  setTimeout(function() {
    ctx.index++;
    console.log(2);
    next();
  }, 1000);
}
function fun3(ctx, next) {
  ctx.index++;
  console.log(3);
}

function fun(funarr, ctx) {
  let funIndex =0;
  function next() {
    funIndex++;
    funarr[funIndex] && funarr[funIndex].call(null, ctx, next);
  }
  funarr[0](ctx, next);
}
var obj = {index:0}

后记

后面有时间研究一下express中间件的实现解析。

上一篇下一篇

猜你喜欢

热点阅读