美文网首页
Koa2 中间件简易洋葱圈模型实现

Koa2 中间件简易洋葱圈模型实现

作者: Oriharas | 来源:发表于2018-08-29 23:03 被阅读0次

整个核心功能在于 compose,这个用于压缩所有被 use 调用过的中间件之上。每一次 use 一个新的中间件的时候,将其 push 进对象里边的成员变量 middlewares 当中。
所以重点就是要在 compose 当中进行递归,以合成最终要调用的那个函数,在监听到 request 请求的时候,将上下文对象 context 传入其中,最终完成整个所有中间件按照 洋葱圈 的模型去执行。

既然要用到递归,那就要先找到它的出口,也就是当 middlewares 数组合成到最后一个中间件的时候,直接返回:

Promise.resolve()

其他的情况,列出相应的关系式子,dispatch(i) 的执行结果返回的就是:

Promise.resolve(fn(context, function next() {
    return dispatch(i + 1)
}))

因为涉及到 async、await 的语法以及相关的移步操作,所以上述递归的返回值都经过了 Promise 包装。
又由于最终要返回一个可接收上下文参数 context 的函数,所以还需要对 dispatch 进行进一步的包装,因此最终的 compose 如下所示:

compose(middlewares) {
    return function (context) {
        return dispatch(0)
        function dispatch(i) {
            let fn = middlewares[i]
            if (!fn) {
                return Promise.resolve()
            }
            return Promise.resolve(fn(context, function next() {
                return dispatch(i + 1)
            }))
        }
    }
}

相应的 use 就可以很快写出了:

use(callback) {
    this.middlewares.push(callback)
}

相关文章

  • Koa2 中间件简易洋葱圈模型实现

    整个核心功能在于 compose,这个用于压缩所有被 use 调用过的中间件之上。每一次 use 一个新的中间件的...

  • koa2中间件原理

    koa2中间件的执行 koa2中间件的执行就像洋葱圈一样,从外面到最里面,再从最里面到最外面。 执行上述代码的结果...

  • Koa2源码阅读: 中间件机制

    中间件机制(洋葱模型):它实现中间件级联调用是借助 koa-compose这个库来实现的。源码只有一个函数。 我...

  • (三)koa-router路由器搭建

    koa2中间件机制-洋葱圈,很好的解决了异步传输的问题,使用async和await就可以轻松解决。现在先完成简单测...

  • koa

    koa的处理流程 koa的中间件 洋葱模型实现 通过await next();进入下一个中间件 next是comp...

  • 实现redux中间件-洋葱模型

  • koa2洋葱模型

    写在前面 我们已经知道koa2中间件是基于async/await实现的,其执行过程是通过next来驱动的,于是,k...

  • koa 洋葱模型

    分析 1、首先这是koa2最简单的入门例子,我将通过这个入门例子来演示koa2的洋葱模型 在这里面,app首先是调...

  • [源码] Redux React-Redux01

    redux中间件洋葱模型imageimage redux中间件注意点image 导航 [深入01] 执行上下文[h...

  • koa2中间件洋葱模型理解

    中间件概念在编程中使用广泛, 不管是前端还是后端, 在实际编程中或者框架设计都有使用到这种实用的模型, 下面我们就...

网友评论

      本文标题:Koa2 中间件简易洋葱圈模型实现

      本文链接:https://www.haomeiwen.com/subject/tqelwftx.html