async/await 是 javascript 中基于 promise 的异步语法糖,async 函数自动返回 promise,await 只能在 async 函数中使用且会暂停执行但不阻塞线程,多个 await 默认串行执行,错误需用 try/catch 捕获。

async/await 是 JavaScript 中处理异步操作的语法糖,它让基于 Promise 的异步代码看起来像同步代码,提升可读性和可维护性。核心在于:函数用 async 声明,内部用 await 等待 Promise 完成,且 await 只能在 async 函数中使用。
async 函数自动返回 Promise
即使你 return 一个普通值,async 函数也会把它包装成已 resolve 的 Promise;如果抛出错误,则返回已 reject 的 Promise。
-
✅ 正确写法:
async function fetchData() { return "done"; }
调用fetchData()返回的是Promise<string></string>,不是字符串本身。 -
❌ 错误写法:
function bad() { await fetch("/api"); }
普通函数里不能用 await,会报 SyntaxError。
await 暂停执行但不阻塞线程
await 后面必须是 Promise(或 thenable 对象),它会让当前 async 函数暂停,把控制权交还给事件循环,等 Promise settle 后再继续执行后续语句——整个过程是非阻塞的。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 如果 Promise 成功,
await promise解析为promise.then(value => value)的结果; - 如果 Promise 失败,
await promise会直接抛出错误,需要用 try/catch 捕获; - 例如:
const data = await fetch("/api").then(r => r.json());等价于更简洁的const data = await (await fetch("/api")).json();
顺序执行多个异步操作
多个 await 语句默认是串行的,前一个完成才执行下一个,适合有依赖关系的流程(如登录 → 获取用户信息 → 加载权限)。
async function loadProfile() {<br> const token = await login();<br> const user = await fetchUser(token);<br> const perms = await fetchPerms(user.id);<br> return { user, perms };<br>}- 注意:这里三步是严格按顺序等待的,不能并发;若想并行,请用
Promise.all([await a(), await b()])❌(错!应写成Promise.all([a(), b()]))——await 要作用在 all 上,而不是每个调用前。
错误处理要靠 try/catch
await 抛出的异常不会被外层 Promise.catch 捕获,必须在 async 函数内部用 try/catch,或者在调用处用 .catch()。
async function risky() {<br> try {<br> const res = await fetch("/api");<br> if (!res.ok) throw new Error(`HTTP ${res.status}`);<br> return await res.json();<br> } catch (err) {<br> console.error("请求失败", err);<br> throw err;<br> }<br>}- 调用时也可链式捕获:
risky().catch(console.error);但推荐在函数内处理业务级错误,只向外抛出关键异常。










