介绍
这个概念因koa框架兴起被熟知。利用generator函数(当时es8还没出,没法用async),实现中间件像洋葱圈一样执行的机制,实现后置处理逻辑。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-38g9Wnjs-1652854006150)(/Users/yang/Downloads/68747470733a2f2f7261772e6769746875622e636f6d2f66656e676d6b322f6b6f612d67756964652f6d61737465722f6f6e696f6e2e706e67.png)]
应用
目前应用于koa、基于koa开发的egg,以及umi-request都使用了洋葱圈模型。
核心理念

如上图,在经过next时,会执行异步,接着执行下一个中间件。以此类推,最终每个中间件都会执行两次,外层执行完成依赖于内层都执行完毕。
koa、umi-request机制大致相同,依靠中间件数组+compose组合函数实现:前者存储中间件,后者决定执行中间件顺序。
伪代码如下:(详细代码可查阅源码)
class Union {