洋葱型(回形针型?)控制流程的作用是?
发布于 9 年前 作者 lian774739140 3985 次浏览 最后一次编辑是 8 年前 来自 问答

在学习koa的过程中,不太理解为啥koa要用回形针的控制流程,这种流程的好处在哪呢?为啥不直接整成线性的控制流程?

5 回复

@magicdawn 这个引用太牛逼了

@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) …

回到顶部