2023-12-30

发布时间 2023-12-30 09:10:31作者: 崮生

2023-12-30

尝试了一下实现中间件,运行那块的函数是请教 chatGPT[1] 得到的,自己之前想的一团乱麻,结果如此简洁。

// 最小中间件实现
// 存储所有中间件
let middlewares: middlewares[] = []
type handel = typeof handel
//   对于纯函数而言,参数就是他的上下文
type middlewares = (ctx: Parameters<handel>, next: handel) => ReturnType<handel>
// 最终处理事物的函数
function handel(a: number) {
    return (a + 1)
}
// 某个中间件
const middlewareA: middlewares = (ctx, next) => {
    // 处理上下文
    const newCtx = ctx.map(v => v + v)
    // 让其他中间件继续处理
    const value = next(newCtx[0])
    // 处理返回值
    return value + 1
}
// 运行中间件
function runMiddlewareHandel(ctx: Parameters<handel>, handel: handel) {
    let index = 0
    const next = (...ctx: Parameters<handel>) => {
        const middleware = middlewares[index]
        index++
        if (middleware) {
            return middleware(ctx, next)
        } else { // 在没有中间件的情况下直接运行最终函数
            return handel(...ctx)
        }
    }
    return next(...ctx)
}
// 注册中间件
middlewares.push(middlewareA)
// 运行 
console.log(handel(1), runMiddlewareHandel([1], handel))

  1. chatGPT

    国内使用多有不易

    此处推荐一个 gpt key 购买网站 - https://console.closeai-asia.com/

    image

    通过上面的链接购买我能够得到一点利润,如下

    image

    ↩︎