什么是async/await_javascript中异步代码如何同步化?

admin 百科 7
async/await是用同步风格编写异步逻辑的语法糖,不改变异步本质;async函数自动返回Promise,await仅在async函数内暂停执行并等待Promise落定,需用try/catch处理错误,多请求应使用Promise.all([p1,p2])并行而非串行。

什么是async/await_javascript中异步代码如何同步化?-第1张图片-佛山资讯网

async/await 不是让异步变同步,而是用同步风格写异步逻辑——它不阻塞线程,也不改变异步本质,只是让代码更易读、更易维护。

async 函数:自动返回 Promise

加了 async 的函数,无论内部写什么,返回值都会被自动包装成 Promise。如果 return 一个普通值,比如 return 42,实际等价于 return Promise.resolve(42);如果抛错,等价于 return Promise.reject(err)

  • 不能用 await 在普通函数或顶层作用域(ES2022 之前)中直接写
  • async function foo() {}const foo = async () => {} 行为一致

await:暂停执行,等待 Promise 落定

await 只能在 async 函数内使用,它会让 JS 引擎“暂停”当前函数的执行(注意:不是卡住线程),等右侧的 Promise 成功 resolve 后,再把结果作为表达式的值继续往下走。如果 Promise 被 reject,就相当于 throw 了一个错误,可以用 try/catch 捕获。

  • const data = await fetch('/api').then(r => r.json()) ✅ 可以,但没必要——await 本身已处理 then
  • const data = await fetch('/api').json() ❌ 错误,fetch() 返回 Promise,.json() 是方法调用,不是 Promise
  • 正确写法:const res = await fetch('/api'); const data = await res.json();

错误处理:用 try/catch,别靠 .catch

await 后的 Promise 如果 reject,会直接冒泡成异常。所以推荐用 try/catch 包裹,语义清晰,也方便捕获中间多个 await 的错误。

标签: javascript java js json ai 作用域

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~