promise优化核心是用结构替代嵌套:以链式.then传递线性依赖,promise.all并行不相关请求,拆分为语义化函数,并在复杂逻辑中合理使用async/await。

用 .then 链式传递,让步骤像读句子一样自然
当后一步必须等前一步结果才能发起(比如“查用户 → 查该用户订单 → 查订单商品”),就别在 .then 里再写一层 new Promise 或嵌套 fetch。直接返回新的 Promise,它会自动进入下一个 .then:
- 每个 .then 回调里,用 return fetch(...) 或 return getUserOrder(userId),而不是手动 new Promise 包一层
- 上一步的返回值会作为参数传给下一步,不用额外变量暂存
- 错误会自动跳过后续所有 .then,直到遇到 .catch,不用每个环节都写 if (err) throw err
用 Promise.all 并行发起不依赖彼此的请求
如果几个接口互不依赖(比如“同时拉取用户信息、通知列表、未读消息数”),强行串行是浪费时间。用 Promise.all 把它们包成一个整体:
- 写法简洁:Promise.all([fetch('/user'), fetch('/notices'), fetch('/messages')])
- 全部成功才进入 .then,任一失败整个就 reject,适合“全有或全无”的场景
- 返回的是数组,顺序和传入顺序一致,可解构:.then(([user, notices, messages]) => {...})
拆分逻辑到独立函数,给每一步起个好名字
把长链式调用塞在一个函数里,依然难读。把每步封装成小函数,名字体现意图,比如:
- fetchUserProfile(id) —— 不只是发请求,还负责校验字段、格式化数据
- enrichWithOrders(profile) —— 接收 profile 对象,内部调用 API 拉订单,返回合并后的对象
- renderDashboard(data) —— 纯渲染,不碰异步
主流程就变成:fetchUserProfile(userId).then(enrichWithOrders).then(renderDashboard).catch(handleError),一眼看懂数据流向。
必要时用 async/await 让同步感更强
链式 .then 对简单流程很清晰,但涉及条件分支(比如“有缓存就用缓存,否则请求”)或循环处理时,async/await 更直白:
- 用 try/catch 统一捕获所有 await 步骤的异常
- 可以自然使用 if/else、for、while 控制流程
- 注意:await 并不等于阻塞线程,它只是语法糖,底层仍是 Promise
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











