← 返回文章列表
JavaScript·467 次阅读

async/await 与异步错误处理

async/await 与异步错误处理

async/await 是 Promise 的语法糖,让异步代码看起来像同步的,是目前处理异步的首选。

基本规则

async function getPost(id) {
  const res = await fetch('/api/posts/' + id) // 等待 Promise 落定
  const post = await res.json()
  return post // async 函数永远返回 Promise,return 的值会被包装
}

getPost(1).then(post => console.log(post))

await 只能出现在 async 函数里(或顶层 ESM 模块中)。它"暂停"的只是当前函数,线程不阻塞,事件循环照常运转。

错误处理

await 等到 rejected 的 Promise 会抛出异常,用 try/catch 接:

async function load() {
  try {
    const post = await fetchPost(1)
    render(post)
  } catch (err) {
    showError(err.message) // 网络错误、404、业务异常统一在这处理
  }
}

不 catch 会导致 unhandledRejection,Node 下甚至可能让进程崩溃。

常见误区

串行 await 拖慢速度:无依赖关系的请求被写成排队执行:

// 慢:两个请求串行
const user = await fetchUser()
const posts = await fetchPosts()

// 快:先一起发,再一起等
const [user, posts] = await Promise.all([fetchUser(), fetchPosts()])

循环里注意:forEach 不支持 await(回调并发执行、等不到),要按顺序就用 for...of,要并发就 Promise.all(arr.map(fn))。

经验:底层 API 可以继续返回 Promise(更灵活),业务编排层用 async/await(更清晰),两者自由搭配。

看到这里了?如果这篇文章帮到过你

请我喝瓶可乐就好 🥤

收款码

评论0 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4