可组合异步函数库的核心是封装无副作用、职责单一的动作单元,接受必要参数并返回原始promise,不操作dom或状态,支持灵活组合、统一错误处理、超时与取消,适配多环境。

提取可组合的异步函数库,核心在于把重复的异步行为抽象成独立、无副作用、可配置的单元,而不是把业务逻辑硬编码进组件或页面里。
明确职责边界:只封装“动作”,不耦合“上下文”
一个可复用的异步函数,应专注完成一件事:比如“获取用户信息”“提交表单”“上传文件”。它不该关心数据怎么展示、错误怎么提示、加载状态怎么控制——这些交给调用方决定。
- 函数签名清晰:接受必要参数(如 userId、payload),返回 Promise 或协程对象
- 不操作 DOM、不修改全局状态、不直接调用 setState 或 ref.value
- 错误统一抛出,由上层捕获处理(例如 throw new Error('timeout'))
支持灵活组合:返回 Promise 而非直接执行
不要在函数内部调用 await 或 then(),而是返回原始 Promise。这样调用方可自由选择串行、并行、重试或取消。
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
- ✅ 好写法:export const fetchUser = (id) => fetch(`/api/users/${id}`).then(r => r.json())
- ❌ 避免写法:export const fetchUser = async (id) => { const res = await fetch(...); return res.json() }(虽可用,但失去组合弹性)
- 并行调用示例:const [user, posts] = await Promise.all([fetchUser(1), fetchPosts(1)])
统一错误与超时处理策略
基础函数可内置通用防护,但要留出覆盖接口。例如默认 10 秒超时,允许调用方传入自定义 timeout 或 signal。
- 用 AbortController 支持取消(尤其在 React/Vue 组件卸载时)
- 封装常用错误类型:NetworkError、ValidationError、AuthError,便于分类响应
- 避免静默失败:即使加了重试,最终仍应 reject,不吞掉异常
适配不同运行环境:轻量桥接层
同一套逻辑可能用于浏览器、Node.js 或 Electron。可通过小模块做适配,保持主函数纯净。
- 网络请求:用 fetch(浏览器) + node-fetch 或 undici(Node)
- 文件操作:浏览器用 Blob/File API,Node 用 fs.promises,通过判断环境自动切换
- 导出时区分:export { fetchUser } from './browser.js' 和 export { fetchUser } from './node.js'










