await只能在async函数内使用,用于暂停执行等待Promise完成;成功时返回resolve值,失败需try...catch捕获;多个无依赖await应改用Promise.all()并行;不能直接用于setTimeout等非Promise函数。

await 只能在 async 函数内部使用,它会让 JavaScript 暂停当前函数的执行,等待 Promise 完成后再继续,看起来像“同步”写法,但底层仍是异步机制。
必须配合 async 函数使用
不能在普通函数或全局作用域直接写 await,否则会报语法错误 SyntaxError: await is only valid in async functions。
- 正确写法:把包含
await的代码包在async function里 - 错误写法:
await fetch('/api/data')直接写在 script 标签最外层
await 会解包 Promise 成功值
如果 Promise 成功(fulfilled),await 表达式返回的是 resolve 的值;如果被拒绝(rejected),默认会抛出错误,需用 try...catch 捕获。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
const data = await Promise.resolve('hello')→data是字符串'hello' -
const res = await fetch('/api')→res是 Response 对象,不是 JSON 数据(还需await res.json()) - 忘记
try...catch会导致未捕获异常中断程序
多个 await 是串行等待,可优化为并行
连续写多个 await 会一个接一个等,效率低;若无依赖关系,可用 Promise.all() 并发发起请求。
立即学习“Java免费学习笔记(深入)”;
- 串行(慢):
const a = await api1(); const b = await api2(); - 并行(快):
const [a, b] = await Promise.all([api1(), api2()]); - 注意:
Promise.all()中任一失败会导致整体失败,如需容错,考虑Promise.allSettled()
常见误用提醒
await 不是万能同步器,它不改变事件循环本质,也不能用于普通回调或非 Promise 值。
-
await setTimeout(() => {}, 1000)❌ ——setTimeout返回的是 timer ID,不是 Promise - 正确做法:封装成 Promise,例如
await new Promise(r => setTimeout(r, 1000)) -
await someFunction()要求someFunction必须返回 Promise,否则虽不报错但无实际等待效果

















