柯里化函数可固化接口请求中重复参数(如baseurl、token、timeout),生成定制化请求函数,简化调用逻辑;支持按模块派生语义化api、运行时动态补全参数,但需避免过度柯里化,保留透传灵活性。

柯里化函数能帮你把接口请求中重复的参数(比如 base URL、token、超时时间)提前固化,让每次调用只需传业务参数,大幅简化调用逻辑。
用柯里化封装通用请求配置
把 axios 或 fetch 的基础配置(如 baseURL、headers、timeout)通过柯里化预先绑定,生成一个“定制版请求函数”:
- 先定义一个接受配置对象的高阶函数,返回一个接收 path 和 data 的函数
- 内部自动合并默认 headers(含 token)、拼接完整 URL、统一错误处理
- 后续调用时只关心“我要访问哪个接口”和“传什么数据”,不用反复写重复字段
按业务模块生成专用请求函数
不同模块常需不同 base URL 或鉴权方式。用柯里化可快速派生出多个语义化函数:
- userApi = curryRequest({ baseURL: '/api/user', headers: { Authorization: 'Bearer xxx' } })
- fileApi = curryRequest({ baseURL: '/api/file', timeout: 30000 })
- 调用时直接 userApi('profile') 或 fileApi('upload', formData)
支持运行时动态补全参数
柯里化不只能固定初始参数,还能在链式调用中逐步传入——比如先固定 token,再根据用户角色决定是否加 admin 权限头:
- const withToken = curry((token) => (config) => ({ ...config, headers: { ...config.headers, Authorization: `Bearer ${token}` } }))
- const requestWithAdmin = withToken('xxx')({ headers: { 'X-Role': 'admin' } })
- 这样既保持复用性,又保留运行时灵活性
避免过度柯里化带来的维护成本
不是所有参数都适合柯里化。优先固化不变或低频变更项(如域名、全局 token),而像 signal(AbortController)、onUploadProgress 这类每次不同的,应保留在最终调用时传入:
- 柯里化后函数仍应支持透传剩余参数,比如 (...args) => axios.post(url, data, { ...options, ...args })
- 别为了柯里化而拆得太细,导致调用链过长或语义模糊
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











