欢迎光临散文网 会员登陆 & 注册

KOA、Redux、中间件,Promise,next等等

2023-05-10 22:28 作者:小老虎Tigger  | 我要投稿

简单看一下koa和redux中中间件的实现

KOA

我们先来看一下koa中间件的用法,copy一个官网的例子

打印结果

koa的中间件,其实主要是koa-compose实现的,use方法是将函数推入队列当中,listen函数中会调用compose返回一个函数,在每次请求时,会去调用这个函数。我们主要看一下compose函数的实现

compose函数接收的是middleware的队列,就是前面使用use将所有middleware推入的队列。返回的也是一个函数,在每次处理请求时,其实执行的是返回的函数。我们将返回的函数简单处理一下。

这个函数结果context、next两个参数,返回了dispatch(0)的执行结果,dispatch函数接收一个index参数,通过index获取到当前执行的中间件fn,然后执行fn(context, dispatch.bind(null, i + 1))。

从dipatch(0)开始执行,其实就是将中间件通过dispatch函数去执行,控制入栈时机。

如果我们修改一下代码,将第一个函数去掉async,那么打印的顺序也会发生变化

而本质其实是这么执行的 

而 fn2又相当于

相当于将console.log(4)放到了微任务队列,会在当前所有同步代码执行完成后,再去执行。

Redux

redux中间件是在 dispatch action 的时候和 action 到达 reducer 之间调用的。我们也简单copy一段官网的例子

applyMiddleware返回了一个函数

这块的compose也比较巧妙,而且传入中间件时使用多层函数,使用时通过多次调用最终将store、next传入,形成闭包,也很巧妙。

但是相比koa,store、next作为中间件的参数可能更容易理解。

KOA、Redux、中间件,Promise,next等等的评论 (共 条)

分享到微博请遵守国家法律