美文网首页
koa洋葱模型原理

koa洋葱模型原理

作者: 赵永盛 | 来源:发表于2020-09-12 20:36 被阅读0次
async function m1(next) {
    console.log('m1')

    await next()

    console.log('e')
}

async function m2(next) {
    console.log('m2')

    await next()

    console.log('d')
}

async function m3(next) {
    console.log('m3')
    
    await next()
}

const next3 = async () => {
    m3()
}

const next2 = async () => {
    m2(next3)
}

const next1 = async () => {
    m1(next2)
}

next1()

// 输出:
// m1
// m2
// m3
// d
// e

首先,关于 洋葱模型 自上而下-》自下而上 回溯机制并不是 koa 自己的特性,而是 async/await 自己执行顺序的特定,就是 async/await 自带这个特性

可以写个 demo 验证一下:

async function a1() {
    console.log('a1')
    await a2()
    console.log('a3')
}

async function a2() {
    console.log('a2')
}

a1()
// 输出
// a1
// a2
// a3

也就是, await 执行时,会先去执行后面的 异步函数,等待后面 异步函数有了结果,才会继续执行 await 后面的代码,自己本身就具有 “回溯机制”

koa 只是做了一件事,就是 创建了 next 函数,这个函数的作用就是调用下一个中间件

下一个中间件同样需要 next 参数,所以我们需要依照中间件列表倒序构建 next 函数,先构建最后一个中间件需要的 next 函数,然后再构建倒数第二个中间件需要的 next 函数...以此类推

最后呢,所有中间件就构成了一条链。我们调用链开头的 next 函数,每个链条节点中又调用

await next()

调用下一个中间件,最终所有中间件都得到了执行。

构建 next 函数我们可以封装一下,是这个样子:

function createNext (middleware, oldNext) {
    return async () => {
        await middleware(ctx, oldNext)
    }
}

const len = this.middlewares.length;
let next = async () => {
    return Promise.resolve()
}

for (let i = len - 1; i >= 0; i--) {
    let currentMiddleware = this.middlewares[i]
    next = createNext(currentMiddleware, next)
}

await next()

同时,为了使最后一个中间件也有 next 参数,我们可以创造一个空的 async 函数

const next = async () {}
//...
m3(next)

相关文章

  • 【Node】深入浅出 Koa 的洋葱模型

    本文将讲解 koa 的洋葱模型,我们为什么要使用洋葱模型,以及它的原理实现。掌握洋葱模型对于理解 koa 至关重要...

  • koa洋葱模型原理

    首先,关于 洋葱模型 自上而下-》自下而上 回溯机制并不是 koa 自己的特性,而是 async/await 自己...

  • Express和 Koa 的区别

    1. Koa 原理 封装请求和响应 通过U型模型/洋葱模型构造中间件 2. 跟Express的区别 2.1 编程模...

  • koa洋葱模型

    koa-compose:koa-compose则是将 koa/koa-router 各个中间件合并执行,结合 ne...

  • koa洋葱模型

    前几天面试node,面试官问了koa的中间件是如何实现的,我一想,卧槽,这特么不是我很熟悉的么,然后就哇啦啦啦的一...

  • koa 洋葱模型

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

  • 【源码学习----koa】koa中间件核心(koa-compos

    最近经常使用koa进行服务端开发,迷恋上了koa的洋葱模型,觉得这玩意太好用了。而且koa是以精简为主,没有很多集...

  • koa 中间件机制以及异常捕获

    koa 中间件机制以及异常捕获 koa 中间件机制解析 koa 的请求处理是典型的洋葱模型,下面是官方的配图,而这...

  • koa全攻略

    1.什么是洋葱模型 简单介绍 用一句话来说,koa,express框架的中间件的执行顺序,可以比喻成洋葱模型。 我...

  • jk node笔记(2)

    express 中间件在没有异步的情况下,符合洋葱模型,一旦有了异步,就会打破洋葱模型。koa 中使用异步函数写中...

网友评论

      本文标题:koa洋葱模型原理

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