前端/移动开发面试题更新 2026-08-05

请谈谈你如何理解 JavaScript 中的 async/await 机制?

前端/移动开发技术原理问题排查JavaScript

考察说明

考查对 JavaScript 异步编程中 async/await 语法糖及其执行机制的理解。

回答思路

  1. 【回答框架 1】async/await 是基于 Promise 的语法糖,用于以同步方式编写异步代码。async 函数总是返回一个 Promise,其中 return 值会被包装为 resolved Promise,抛出异常则包装为 rejected Promise。
  2. 【回答框架 2】await 只能在 async 函数内使用,它会暂停当前 async 函数的执行,等待右侧 Promise 状态确定。如果等待的 Promise resolve,await 表达式返回其值;若 reject,则抛出异常,可通过 try/catch 捕获。在事件循环中,await 会让出线程,不阻塞其他任务。
  3. 【回答框架 3】async/await 使异步代码更易读、更接近同步代码风格,避免了回调地狱和冗长的 Promise 链。与 .then/.catch 相比,错误处理更直观,流程控制也更简单。
  4. 【回答框架 4】实际使用时需要注意:await 是顺序执行的,若不相关应使用 Promise.all 并行;async/await 只能在支持 Promise 的环境中使用;过度使用可能掩盖并发需求。理解其底层基于 Promise 和微任务队列,有助于排查执行顺序问题。
  5. 【关键点 1】async 函数返回 Promise,await 用于等待 Promise 并提取结果。
  6. 【关键点 2】await 会暂停 async 函数执行,但不阻塞事件循环,本质是利用微任务调度。
  7. 【关键点 3】async/await 是 Promise 的语法糖,不替代 Promise,而是提升可读性和错误处理体验。
  8. 【关键点 4】多个无关 await 会串行,应使用 Promise.all 进行并行优化。
  9. 【易错点 1】认为 await 是同步阻塞,实际上它是异步等待,不阻塞主线程。
  10. 【易错点 2】在非 async 函数中直接使用 await 会导致语法错误。
  11. 【易错点 3】忽略 async 函数返回的是 Promise,导致外层 .then 或额外包装。