2023-12-30
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))
chatGPT
国内使用多有不易
此处推荐一个 gpt key 购买网站 - https://console.closeai-asia.com/
通过上面的链接购买我能够得到一点利润,如下
↩︎
http://www.shenzilong.cn/