promise的核心价值是将嵌套回调转为平铺链式调用,提升可读性与可控性;支持then链式传递、统一catch错误处理、all/race并行竞速及finally收尾清理。

Promise 的核心价值,就是把嵌套的回调变成平铺的链式调用,让异步逻辑像同步代码一样线性可读、集中可控。
用 then 链替代多层嵌套
传统回调中,获取用户 → 订单 → 订单详情,会形成三层缩进;而 Promise 可以写成单行流程:
- 每个 then 返回一个新的 Promise,自然承接下一步操作
- 上一步的返回值(如
res.data.userId)直接作为参数传入下一个then - 避免手动传递变量、层层判断错误,逻辑更聚焦于业务本身
统一错误处理,不再重复写 fail
回调地狱里,每一层都要单独写错误分支;Promise 中只需一个 catch 就能捕获整条链上的任何异常:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
-
.catch()等价于.then(null, onError),但作用域覆盖整个链 - 即使在某个
then回调里抛出throw new Error(),也会被后续catch捕获 - 网络请求失败、数据解析出错、空值访问等,都归到一处处理,比如统一弹提示、跳登录页
并行与竞速:all 和 race 的实用场景
不是所有异步都要串行。Promise 提供了原生组合能力:
- Promise.all([p1, p2, p3]):适合加载首页多个独立资源(用户信息、公告、未读消息),全部成功才继续,任一失败则整体中断
- Promise.race([p1, p2]):适合设置超时控制,比如发起请求的同时启动一个 5 秒定时器,谁先返回就用谁的结果
- 两者都不改变原有 Promise 的状态逻辑,只是封装调度策略,不增加理解负担
finally 做收尾清理,和业务逻辑解耦
loading 状态、定时器、连接释放这类“无论成败都要做的事”,不该混在 success/fail 分支里:
- .finally(() => { hideLoading() }) 不接收参数,也不影响链中值的传递
- 它在
then或catch执行完毕后立即触发,保证清理动作必达 - 相比手动在两个分支里各写一遍
hideLoading(),更简洁也更可靠










