傻瓜式解读koa中间件处理模块koa-compose的使用

2020-06-17 06:53:24易采站长站整理

“middleware 4 return”

“middleware 3 return”

“middleware 2 return”

“middleware 1 return”

按着代码运行流程一步步分析:


dispatch(0)

i==0,index==-1 i>index 往下


index=0

fn=f1

Promise.resolve(f1(context, dispatch.bind(null, 0 + 1)))

这就会执行


f1(context, dispatch.bind(null, 0 + 1))

进入到f1执行上下文


console.log('middleware 1');

输出middleware 1


next()

其实就是调用dispatch(1) bind的功劳

递归开始


dispatch(1)

i==1,index==0 i>index 往下


index=1

fn=f2

Promise.resolve(f2(context, dispatch.bind(null, 1 + 1)))

这就会执行


f2(context, dispatch.bind(null, 1 + 1))

进入到f2执行上下文


console.log('middleware 2');

输出middleware 2


next()

其实就是调用dispatch(2)

接着递归


dispatch(2)

i==2,index==1 i>index 往下


index=2

fn=f3

Promise.resolve(f3(context, dispatch.bind(null, 2 + 1)))

这就会执行


f3(context, dispatch.bind(null, 2 + 1))

进入到f3执行上下文


console.log('middleware 3');

输出middleware 3


next()

其实就是调用dispatch(3)

接着递归


dispatch(3)

i==3,index==2 i>index 往下


index=3

i === middleware.length

fn=next

Promise.resolve(next(context, dispatch.bind(null, 3 + 1)))

这就会执行


next(context, dispatch.bind(null, 3 + 1))

进入到next执行上下文


console.log('middleware 4');

输出middleware 4


next()

其实就是调用dispatch(4)

接着递归


dispatch(4)