柯里化函数实现配置项分步注入,核心是将多参数函数拆为单参数函数链,支持预设配置与业务数据分离;可结合闭包动态更新配置,并通过函数组合构建可测、可复用的请求流水线。

柯里化函数实现配置项的分步注入,核心是把多参数函数拆成一系列单参数函数,每次调用返回新函数,直到参数收齐才执行;配置项可作为中间步骤传入,形成“预设配置 + 后续数据”的灵活组合。
基础柯里化:支持任意参数分步传入
先实现一个通用柯里化工具,它能自动将普通函数转为可分步调用的形式:
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn(...args);
}
return (...moreArgs) => curried(...args, ...moreArgs);
};
}
这样,哪怕函数有 4 个参数,也可以分 2 次、3 次甚至 4 次传入,每次只给一部分。
配置前置:把配置项作为第一组参数固定
实际场景中,配置(如 API 地址、超时时间、默认 headers)往往在初始化阶段确定,后续每次调用只需传业务数据。这时可让柯里化函数优先接收配置对象:
const request = curry((config, url, data) => {
return fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json', ...config.headers },
body: JSON.stringify(data),
signal: AbortSignal.timeout(config.timeout || 5000)
});
});
// 预设配置,生成专用请求函数
const apiV1 = request({
headers: { Authorization: 'Bearer token123' },
timeout: 8000
});
// 后续只关心 url 和 data
apiV1('/users', { name: 'Alice' }); // 发起带认证的请求
apiV1('/posts', { title: 'Hello' });
支持配置更新与复用:用闭包保存默认配置
如果需要动态调整配置(比如 token 过期后刷新),可封装一层工厂函数,返回带默认配置但允许覆盖的柯里化函数:
function createRequest(defaultConfig) {
return curry((config, url, data) => {
const finalConfig = { ...defaultConfig, ...config };
return fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json', ...finalConfig.headers },
body: JSON.stringify(data),
signal: AbortSignal.timeout(finalConfig.timeout || 5000)
});
});
}
const baseRequest = createRequest({ timeout: 5000 });
const userApi = baseRequest({ headers: { 'X-App': 'user' } });
const adminApi = baseRequest({
headers: { 'X-App': 'admin', 'Authorization': 'Bearer new-token' }
});
结合函数组合:配置注入 + 数据处理流水线
柯里化常与函数组合搭配,把配置注入、数据校验、格式转换等步骤解耦:
const withAuth = curry((token, fn) => (...args) =>
fn(...args, { headers: { Authorization: `Bearer ${token}` } })
);
const withTimeout = curry((ms, fn) => (...args) =>
fn(...args, { timeout: ms })
);
// 组装:先注入 token,再注入超时,最后传 URL 和 data
const safePost = withAuth('abc')(
withTimeout(10000)(fetchPost)
);
safePost('/login', { user: 'x' });
这种方式让每个配置项独立可测、可替换、可复用,不污染原始函数逻辑。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











