“middleware 4 return”
“middleware 3 return”
“middleware 2 return”
“middleware 1 return”
按着代码运行流程一步步分析:
dispatch(0)i==0,index==-1 i>index 往下
index=0fn=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=1fn=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=2fn=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=3i === 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)









