async函数返回Promise并允许用await暂停执行,await仅在async函数内有效,需try/catch捕获错误,多请求应Promise.all并发而非串行await。

async 函数本身不“处理等待”,它只是让函数返回一个 Promise,并允许你在函数内部用 await 暂停执行,直到 Promise 完成。真正的等待逻辑由 await 实现,且只在 async 函数内有效。
await 只能用在 async 函数里
这是硬性限制。如果你在普通函数或全局作用域中写 await fetch(...),会直接报语法错误。
- 正确写法:把异步操作包进 async 函数,再调用它
- 错误写法:在非 async 环境中直接 await(哪怕只有一行)
- 注意:async 函数调用后立即返回 Promise,不是阻塞执行
await 等的是 Promise 的 fulfilled 状态
await 后面的表达式会被自动转为 Promise(如果还不是),然后暂停当前 async 函数,等它 resolve 后才继续往下走。
-
await 123→ 立即继续(等价于await Promise.resolve(123)) -
await fetch('/api')→ 等网络响应完成并 resolve -
await new Promise(r => setTimeout(r, 1000))→ 等 1 秒
错误要 try/catch,不能靠 .catch()
await 表达式一旦 reject,会像 throw 一样中断执行,必须用 try/catch 捕获,否则会变成 async 函数返回的 Promise 的 rejection。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 写法:
try { const data = await api(); } catch (err) { console.error(err); } - 避免:
await api().catch(...)—— 这样虽然能捕获,但会丢失 await 的语义清晰性 - 多个 await 可共用一个 try/catch,也可各自独立处理
并发等待用 Promise.all(),别连写 await
如果多个请求彼此无关,连写 await 是串行的,白白浪费时间。应该先发起所有请求,再统一 await。
- 低效串行:
const a = await fetch('/a'); const b = await fetch('/b'); - 高效并发:
const [a, b] = await Promise.all([fetch('/a'), fetch('/b')]); - 注意:Promise.all() 中任意一个 reject,整个就失败;需要容错可用 Promise.allSettled()
不复杂但容易忽略:await 是暂停当前 async 函数的执行流,不是锁住整个线程,其他代码(比如定时器、事件回调)照常运行。

















