用闭包封装数据格式化逻辑,通过工厂函数接收映射配置生成专属格式化函数,支持路径提取、空值归一、类型转换及运行时策略切换,配合解构入参与默认值降低调用门槛,并注意避免内存泄漏。

直接用闭包封装数据格式化逻辑,能把转换规则和原始数据解耦,让同一套处理流程适配不同接口响应结构,避免重复写 if-else 或硬编码字段映射。
把格式化规则“封进”闭包,复用不改逻辑
不同 API 返回的字段名、嵌套层级、空值表示方式常不一致(比如有的用 null,有的用 "",有的把用户信息包在 data.user 里)。与其每个请求后都手动处理,不如写一个工厂函数,接收字段映射配置,返回专属格式化函数:
- 外层函数接收配置对象,如 { id: "uid", name: "full_name", avatar: "profile.avatar" }
- 内层函数接收原始响应数据,按配置做路径提取、空值归一、类型转换
- 每次调用返回的函数都自带一套规则,互不影响
支持运行时动态切换格式策略
有些场景需要根据环境或用户权限返回不同结构的数据。闭包能天然携带上下文,比如:
- 传入 isCompact: true,格式化函数自动省略地址、联系方式等非关键字段
- 传入 locale: "zh-CN",自动对时间、数字做本地化格式化
- 这些参数在工厂创建时固化,后续所有调用都自动生效,不用每次传
配合解构 + 默认值,降低调用门槛
格式化函数本身可以设计成解构入参,让调用更自然:
- 接受 { data, meta, error } 结构的对象,而不是要求必须是 Axios 响应全量对象
- 内置默认行为:没传 error 就当成功;meta.total 缺失就设为 data.length
- 调用时只需 formatter({ data: res.data }),不用关心其他字段存不存在
避免内存泄漏的小提醒
闭包会持有对外部变量的引用,如果格式化函数长期驻留(比如挂到全局工具对象上),要小心意外捕获大对象:
- 不要在工厂函数里直接传入整个响应体,只提取必要字段做配置
- 若需缓存中间结果(如正则、模板字符串),确保它们体积可控
- 不再使用某格式化实例时,可主动赋值为 null,协助垃圾回收
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











