async/await 通过将嵌套回调转为顺序等待,使异步代码同步化可读;需用 async 声明函数以启用 await,自动返回 Promise;await 逐行解构 .then() 链,直接赋值变量;错误统一由 try/catch 捕获,堆栈精准;for 中 await 默认串行,并发需用 Promise.all。

用 async/await 优化回调地狱,核心是把“嵌套等待”变成“顺序等待”,代码读起来像同步逻辑,但仍是非阻塞的异步执行。
给函数加 async,让 await 有落脚点
async 是启用 await 的前提。只有标记为 async 的函数,才能在内部使用 await,并自动返回 Promise:
- 普通函数里写 await 会直接报错
- 箭头函数也可写成
const fn = async () => { ... } - 即使函数体里没 await,加了 async 也会返回 Promise,方便统一链式调用
把 .then() 拆成一行一个 await
原来靠参数层层传递的数据,现在可直接赋值给变量,依赖关系一目了然:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 错误写法:
fetch('/user').then(r => r.json()).then(u => fetch(`/posts?uid=${u.id}`)) - 正确写法:
const res = await fetch('/user') const user = await res.json() const postsRes = await fetch(`/posts?uid=${user.id}`) const posts = await postsRes.json() - 注意:fetch 返回 Response,res.json() 也是 Promise,必须两层 await,漏掉第二层会拿到 Promise 实例而非数据
用 try/catch 统一兜住所有异步错误
不再需要每个 .then() 后配 .catch(),也不用担心某一层没写错误处理就静默失败:
- 所有 await 行抛出的异常(网络失败、JSON 解析错误、业务校验失败)都会进入同一个 catch 块
- 可以按需分段包裹:比如只对 fetch 加重试,对数据处理做降级
- 堆栈指向具体 await 行,调试时断点位置明确,不用在回调里跳来跳去
合理安排循环与并发,别被 await “串行”误导
for 循环里的 await 默认串行执行;想并发,得主动构造 Promise 集合:
- 串行查 10 个用户?直接
for (let i = 0; i - 并行拉 3 个独立接口?
const [a, b, c] = await Promise.all([fetchA(), fetchB(), fetchC()]) - 要“尽力而为”不因单个失败中断?改用
Promise.allSettled([...]) - 限制并发数(如同时最多 5 个请求)?需配合队列控制或 p-limit 等工具

















