await 使异步逻辑线性化,需在 async 函数中使用,错误写法会报语法错误;统一用 try/catch 处理异常,避免遗漏;多步依赖自然串行,变量作用域清晰;并发请求应使用 Promise.all 或 allSettled。

await 让异步事件处理从“回调嵌套”变成“线性阅读”,关键不是省代码,而是让逻辑回归人脑习惯——点击、等待、响应、出错,一行接一行。
事件处理器必须声明为 async
按钮点击、表单提交这些常见事件,不能在普通函数里直接 await。否则会报 Uncaught SyntaxError: await is only valid in async function。
- ✅ 正确写法:
button.addEventListener('click', async () => { const data = await fetch('/api'); render(data); }); - ❌ 错误写法:
button.addEventListener('click', () => { const data = await fetch('/api'); });(语法错误) - 箭头函数也要显式加 async,外层函数不会“传染”执行上下文
错误处理统一用 try/catch,不再分散 .catch()
以前每个 .then() 后都得配一个 .catch(),容易漏或位置错;现在所有 await 都能被同一个 try 块覆盖,包括网络失败、JSON 解析异常、甚至业务校验 throw。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 例如:
try { const res = await fetch('/user'); if (!res.ok) throw new Error(`HTTP ${res.status}`); return await res.json(); } catch (e) { showError(e.message); } - ⚠️ 注意:不能混用
await promise.catch(...),否则可能绕过 try/catch,导致未捕获 rejection
多步依赖操作自然串行,无需手动链式传递
比如先获取用户,再根据用户 ID 拉取订单——Promise 要靠 .then() 传参,容易丢失作用域或写错 return;async/await 直接用变量承接,下一行接着用。
立即学习“Java免费学习笔记(深入)”;
const user = await fetch('/user').then(r => r.json());const orders = await fetch(`/orders?uid=${user.id}`).then(r => r.json());- 变量 user 在作用域内自然可用,不用额外包装或闭包
并发请求不靠 for 循环,改用 Promise.all
写 for (const url of urls) { await fetch(url); } 是串行,耗时累加;真正提速要让请求同时发起。
- ✅ 并发获取:
const [a, b] = await Promise.all([fetch('/a'), fetch('/b')]); - ✅ 允许部分失败:
const results = await Promise.allSettled([fetch('/a'), fetch('/b')]); - 避免把“等一个再发下一个”的写法误当成“异步处理”,那只是慢的同步

















