在学习koa的过程中,不太理解为啥koa要用回形针的控制流程,这种流程的好处在哪呢?为啥不直接整成线性的控制流程?
@magicdawn 谢谢前辈的回复,我思索了许久。。。还是想问问前辈,没理解啊,采用Promise完全可以不采用回形针模式的啊。。。 稍微改下Koa的源码就可以整成线性模式的。 第一步,在koa-compose模块里面把compose函数里的dispatch函数里的
return Promise.resolve(fn(context, function next() {return dispatch(i + 1)}))
改成
return Promise.resolve(fn(context)).then(() => dispatch(i + 1))
第二步,把koa的中间件的参数(ctx, next)换成一个(ctx),把
yield next();
去掉,并且返回Promise,这个koa就是按照线性的流程运行的。。。
整个过程就相当于把各个中间件通过promise.then连在一起了,然后线性运行,小白真心不懂为啥回形针流程是妥协的结果?
@lian774739140 你说不给handler 传 next 参数 ?
顺序执行, 那么一个 /favicon 要走完所有的中间件, 即是你是用了一个中间件去判断 path === /favicon , 然后响应某一 ico 文件, 然后了, 接着使用了一个 static 中间件, 刚好有一个 favicon.ico 文件, 就把前面的给替换掉了~ the last wins, 天啦噜~
中间件式的框架, 应该把流程交给 handler, 让handler 来决定结束此行程, 还是继续往下走(down stream) …