[你需要了解的中间件]阅读koa-compose后的感悟

本文介绍了如何实现和优化函数组合,并探讨了Koa中间件的工作原理,特别是在支持异步操作方面。通过示例展示了如何利用compose函数组合多个中间件,以解决实际业务场景中的并发控制和用户额度校验问题,强调了中间件拆分对于代码维护的重要性。
摘要由CSDN通过智能技术生成

前篇

关于compose函数对于学过函数编程一定不陌生。在 redux 中也有应用。下面我们来实现一个 compose。场景:我们有三个函数,现在想要实现 1+2+3+4 结果。

const addOne = (num: number) => {
   
  console.log('addOne input value', num);
  return num + 1;
};
const addTwo = (num: number) => {
   
  console.log('addTwo input value', num);
  return num + 2;
};
const addThree = (num: number) => {
   
  console.log('addThree input value', num);
  return num + 3;
};

我们可以手动调用

addOne(addTwo(addThree(4)))

// 代码执行顺序如下:
/**
 * addThree input value 4
 * addTwo input value 7
 * addOne input value 9
 * 10
 * /

下面我们通过compose来组合上面函数的执行

function compose(...funcs) {
   
  return (val) => funcs.reduceRight((acc, cur) => cur(acc), val);
}

//test
compose(addOne, addTwo, addThree)(4);

我们已经完成一个简易的compose函数.下面我们有一个sum函数想这样做

function sum(a: number, b: number) {
   
  return a + b;
}
const sumValue = compose(addOne, addTwo, addThree, sum)(2, 2);
console.log(sumValue);

我们可以想到这样改造:

function compose(...funcs) {
   
  return (...args) => funcs.reduceRight((acc, cur) => cur(acc), ...args);
}

由于 reduceRight 初始化只能介绍一个参数,这样并不能达到我们预期。因此我们可以将最后一个函数拿出来执行完后将值赋给reduceRight

function compose(...funcs) {
   
  return (...args) => {
   
    const lastFn = arr.pop();
    const value = lastFn(...args);
    return arr.reduceRight((acc, cur) => cur(acc), value);
  };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值