CNode

洋葱型(回形针型?)控制流程的作用是?

问答
Llian774739140__legacy_52c53f0a8a716e0b1512c806发布于11 年前最后回复11 年前5 回复4849 浏览0 收藏

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

查看回复

回复 (5)

M
magicdawn#3·11 年前
引用 alsotang@magicdawn 这个引用太牛逼了

@alsotang 哈哈 @coordcn

引用 magicdawn没好处 妥协的结果 https://cnodejs.org/topic/560dbc826a1ed28204a1e7de 560dda826a1ed28204a1e7e1

@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连在一起了,然后线性运行,小白真心不懂为啥回形针流程是妥协的结果?

M
magicdawn#5·11 年前
引用 lian774739140__legacy_52c53f0a8a716e0b1512c806@magicdawn 谢谢前辈的回复,我思索了许久。。。还是想问问前辈,没理解啊,采用Promise完全可以不采用回形针模式的啊。。。 稍微改下Koa的源码就可以整成线性模式的。 第一步,在k...

@lian774739140 你说不给handler 传 next 参数 ?

顺序执行, 那么一个 /favicon 要走完所有的中间件, 即是你是用了一个中间件去判断 path === /favicon , 然后响应某一 ico 文件, 然后了, 接着使用了一个 static 中间件, 刚好有一个 favicon.ico 文件, 就把前面的给替换掉了~ the last wins, 天啦噜~

中间件式的框架, 应该把流程交给 handler, 让handler 来决定结束此行程, 还是继续往下走(down stream) ...

参与回复
登录后即可参与回复。登录