You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中async/await与同步JavaScript的核心区别是什么?

JavaScript 中async/await的实际作用是什么?

很多人会混淆async/await的等待和同步代码的等待,二者本质完全不同:

  • 同步代码的等待是阻塞式等待:会占满整个JS主线程,等待过程中浏览器无法响应用户点击、滚动等任何交互,其他JS任务也必须排队等待当前同步任务执行完成才能运行。
  • async/await的等待是非阻塞式挂起:执行到await时,当前async函数会暂时退出,主线程可以正常处理其他任务、响应用户操作,等到await后的异步任务(Promise)返回结果后,再回到async函数中继续执行后面的代码。

async/await本质是 Promise 的语法糖,核心作用就是在保留JS异步非阻塞特性的前提下,让异步代码的写法和可读性接近同步代码,避免了传统回调写法的回调地狱问题。

下面举两个对比示例:

同步JavaScript代码

function getStudentList() {
  return ['Adam', 'Ben'];
}

function findStudent(who) {
  const list = getStudentList();

  const found = list.some(student => student === who);

  console.log(found); // 输出 true
}

findStudent('Adam');

这段代码执行时全程阻塞主线程,getStudentList直接返回结果,后续逻辑同步执行,执行完成前主线程无法处理其他任务。

使用async/await的异步JavaScript代码

function getStudentList() {
  return new Promise(resolve => {
    setTimeout(() => resolve(['Adam', 'Ben']), 1000);
  });
}

async function findStudent(who) {
  const list = await getStudentList();

  const found = list.some(student => student === who);
  console.log(found); // 1秒后输出 true
}

findStudent('Adam');

这段代码执行到await getStudentList()时,findStudent函数会暂停,但接下来的1秒等待时间里,主线程完全空闲,可以正常处理其他操作,不会出现页面卡顿的情况。

看起来const list = getStudentList();和const list = await getStudentList();写法和执行顺序类似,但底层的运行逻辑和对主线程的影响完全不同。

内容的提问来源于stack exchange,提问作者Aslam Jiffry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:51:03