Javascript简单实现middleware

前言

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

实现效果(需求)

完成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中间件的实现解析。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,914评论 25 709
  • 1. 简介 这篇文章主要的目的是分析理解express的源码,网络上关于源码的分析已经数不胜数,这篇文章准备另辟蹊...
    没事造轮子阅读 5,155评论 0 8
  • 斯经理的脸上已经涂满了蛋糕,新云将蛋糕盘上剩下的一坨奶油抓起来,想要再补几抹,斯经理也急了,桥武在旁边,三个人手里...
    Sophie朵儿阅读 5,104评论 0 0
  • I便签:当别人试图消除你的动力时,我们的第一反应是做出抵抗。以情感共鸣代替主观判断,以提问的方式代替空洞的说教,不...
    plait_7015阅读 845评论 0 0
  • 一.君子报仇,十年不晚 锣鼓喧天,张灯结彩。今晚的严府无疑是京城最热闹的地方。 看那满座宾朋,看那满桌珍馐,看那满...
    轻轻的菲阅读 3,885评论 0 3