async/await 通过统一的 try/catch 错误捕获、线性流程书写、显式执行控制及自动 Promise 化,显著提升异步代码健壮性与可维护性。

async/await 本身不直接“增强健壮性”,但它通过更清晰的结构和更自然的错误处理机制,让开发者更容易写出健壮的异步代码。
集中统一的错误捕获
使用 try/catch 就能捕获 await 等待过程中所有可能的异常——包括网络请求失败、JSON 解析出错、空值访问等。不像 Promise 链中 .catch() 容易漏写或位置不对,try/catch 的作用域明确,逻辑归属一目了然。
- fetch 报错(如离线)、返回非 2xx 状态码,都会触发 catch
- response.json() 失败(响应体不是合法 JSON),也会被同一 try/catch 捕获
- 避免多个 .catch 分散在不同链路,降低遗漏风险
线性流程降低逻辑错乱概率
异步操作按顺序书写,每一步依赖上一步结果,天然符合人类阅读习惯。没有嵌套、没有 then 堆叠,也就减少了因缩进过深、回调层级混乱导致的逻辑跳转错误或变量作用域误用。
- 比如连续请求 A → B → C,可直接用三个 await 串起来,中间变量作用域清晰
- 不需要手动传递参数或拼接 Promise 链,减少中间状态管理出错的可能
- 条件分支(如 if (data.id))可直接写在 await 后,不易错位
显式控制执行时机与依赖关系
每个 await 都是明确的暂停点,开发者清楚知道哪一步在等什么、何时继续。这使得超时控制、取消机制、重试逻辑更容易插入和调试。
- 可在 await 前加判断(如 !token 就提前 return),避免无效请求
- 配合 AbortController 实现请求中断,逻辑位置直观
- 重试逻辑(如 while + try/catch + await)结构紧凑,不易失控
返回值自动 Promise 化,减少类型混淆
async 函数无论 return 什么,都确定返回 Promise,调用方无需再手动包装或判断。这种一致性降低了消费端处理逻辑的不确定性。
- return 42 → Promise.resolve(42)
- throw new Error() → Promise.reject(error)
- 调用方始终可用 .then/.catch 或 await 处理,接口契约稳定


















