中间件 | koa-compose源码阅读笔记

博主分享了首次阅读Koa-compose源码的经历,通过调试和群友帮助,理解了其工作原理。源码中的await关键字使得函数按顺序执行,形成洋葱模型。文章强调了阅读源码的重要性,并邀请有兴趣的人参与类似活动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

koa-compose源码阅读笔记

第一次阅读源码有些吃力,之前的时候只是看过,看一眼看不懂就不想看了,这次得到了群里的大佬鼓励,经过一天半的时间,终于把koa-compose50行不到源码看懂理顺了。

下图是根据若川大佬文档,使用测试用例在45行处打上断点,我这变成了63行,因为我上面的代码都做了注释。下面我们开始使用jest测试用例。
在这里插入图片描述
按下图操作,代码运行,并且可以看到代码运行到我打断点的地方暂停了。
在这里插入图片描述
顶部有五个操作按钮,第一次用这种方式,不知道它们分别代表这什么意思:
按钮1:运行/继续 F5,真正的一步一步运行
按钮2:单步跳过(又叫逐过程) F10,按语句单步执行。当有函数时,不会进入函数。
按钮3:单步调试(又叫逐语句) F11:当有函数时,点击这个按钮,会进入这个函数内。
按钮4:单步跳出 ⇧F11:如果有循环,点击该按钮,会执行到循环外面的语句。
按钮5:重启 ⇧⌘F5。
按钮6:退出debug。
在这里插入图片描述
下面是进入compose函数后我做的分析,该函数return一个promise,resolve里面的参数就是我们传到数组的函数,在这调用并传递两个参数。当一个函数调用await next() 触发dispatch.bind(null, i + 1)依次加载直到i我们传递进来的数组长度就会直接resolve()
在这里插入图片描述
下面我们看arr数组的顺序是1,2,3,4,5,6,当时看的时候前面123可以理解,后面为什么456,在我的脑海中在想代码倒着往上执行,不能理解,后来在群友的帮助下,注意到了await,在这之前我也知道await是等待的意思,可能当时蒙圈了把。当await next()执行下面代码等待它执行完在执行,当执行的时候又会进入到数组第二个函数,第二个函数执行到await next()下面代码不会执行,此时第一个函数的await next()还没执行完后面代码仍在等待,依次类推,到第三个的时候这时候compose 函数有个条件判断 此时 i
数组的长度所以直接resolve()里面没有参数,代码往下执行push(4)这是第一个函数的await next()执行完了开始执行后面的代码push(5),此时第一个await next()执行完了开始执行后面的代码 push(6)。这样就清晰明了了。
在这里插入图片描述
总结:第一次读源码,中间读的都想放弃,但是当时就在想我为什么读不明白,所以我就一直在坚持,后面在若川大佬及群友的帮助下,算是完成了第一次读源码任务。也让我学到了很多的基础东西,认识到自己的不足,以后还希望若川大佬多多发布读源码活动,让我们在摸鱼的同时也能学到很多东西。有想加入的欢迎留言哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值