JavaScript 中 async + await 和直接同步方式执行有什么区别和意义

结论先给一句话:

async / await并不是把异步变成同步,而是用“同步写法”来写“异步代码”,本质仍然是异步。

下面我从执行方式、事件循环、性能、使用意义、对比示例一步一步讲清楚。


一、最核心的区别一句话版

方式本质
同步代码阻塞线程,一步不完成,后面不执行
async + await不阻塞线程,遇到await会“暂停当前函数”,把控制权交回事件循环

JavaScript只有一条主线程,真正的“同步等待”在 JS 里几乎是不存在的(除非你卡死浏览器)。


二、执行层面到底发生了什么?

1. 同步方式(阻塞)

function syncTask() { const result = heavyCompute(); // 假设是耗时操作 console.log(result); console.log('end'); }

执行流程:

heavyCompute 完成 → console.log(result) → console.log('end')

问题:

  • 浏览器/UI 会卡死

  • JS 主线程被占用

  • 用户无法点击、滚动


2. async / await(非阻塞)

async function asyncTask() { const result = await fetch('/api/data'); console.log(result); console.log('end'); }

真实执行流程是:

调用 asyncTask ↓ 遇到 await ↓ 当前 asyncTask 暂停 ↓ JS 主线程继续执行其他任务 ↓ Promise resolved ↓ asyncTask 恢复执行

JS 并没有“等在那里”


三、用事件循环角度看区别(重点)

示例对比

console.log('start'); async function test() { console.log('a'); await Promise.resolve(); console.log('b'); } test(); console.log('end');

实际输出顺序是:

start a end b

为什么?

  • await后面的代码会被放进微任务队列

  • 当前同步栈执行完后才继续

await = Promise.then 的语法糖


四、async / await 和 Promise.then 本质是一样的

async / await 写法

async function getData() { const res = await fetch(url); const data = await res.json(); return data; }

等价 Promise 写法

function getData() { return fetch(url) .then(res => res.json()) .then(data => data); }

区别不在执行方式,在“可读性”


五、那 async / await 的“意义”到底是什么?

1. 让异步代码像同步一样“好读”

对比感受一下:

Promise 地狱版本
getUser() .then(user => { return getOrders(user.id); }) .then(orders => { return getOrderDetail(orders[0].id); }) .then(detail => { console.log(detail); }) .catch(err => console.error(err));
async / await 版本
async function run() { try { const user = await getUser(); const orders = await getOrders(user.id); const detail = await getOrderDetail(orders[0].id); console.log(detail); } catch (e) { console.error(e); } }

逻辑是线性的,但执行仍是异步的


2. 错误处理更像同步代码

try { const res = await fetch(url); } catch (err) { console.error(err); }

.catch()

  • 更直观

  • 不容易漏掉异常

  • 更接近传统语言(Java / Python)


3. 更容易做流程控制

if (needLogin) { await login(); } await loadData(); await renderPage();

不用嵌套、不用链式调用。


六、async / await 并不能解决什么问题?

1. 不能提升性能

await task1(); await task2();

等价于串行

如果想并行:

await Promise.all([task1(), task2()]);

2. 不能变成真正同步

JS 里不存在

const data = fetchSync(url); //

如果有,浏览器会直接卡死。


七、什么时候“看起来像同步”但不是同步?

误区示例

const data = await fetch(url);

很多人以为:

“这一行执行完才会执行下一行,所以是同步”

❌ 错

✅ 正确理解是:

  • 函数暂停

  • 主线程继续

  • 不是阻塞等待


八、一句话总结(面试可用)

async / await 的本质是 Promise 的语法糖,它不会阻塞主线程,只是让异步代码拥有同步的书写和阅读体验,真正的执行仍然依赖事件循环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1124509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球实验室耗材市场:技术驱动下的区域竞争与未来增长图谱

实验室耗材作为科研、医疗和工业检测的“基础工具箱”,其市场规模与技术创新紧密关联。QYResearch数据显示,2024年全球实验室耗材市场规模达10.21亿美元,预计2031年将增至14.6亿美元,2025-2031年复合增长率(CAGR&#…

华为Mate 80系列全对比:从标准版到Pro Max,各版本之间都有什么差异?

文章目录华为Mate 80系列全对比:从标准版到Pro Max,三千元差价到底差在哪?一、核心参数一览二、性能差异:从够用到极致三、影像系统:从日常记录到专业创作四、屏幕与续航:体验感的直观升级五、特色功能&…

Manim 数学动画实战:像“3Blue1Brown”一样用 Python 代码制作高数教学视频

标签: #Manim #Python #数学可视化 #3Blue1Brown #数据可视化 #科普视频 🌟 前言:为什么要用代码做视频? Manim (Mathematical Animation Engine) 是一个由 3Blue1Brown 的作者 Grant Sanderson 开发的动画引擎。 它的核心逻辑是:精确控制。 你需要画一个正弦函数,不需…

【Linux命令大全】003.文档编辑之sed命令(实操篇)

【Linux命令大全】003.文档编辑之sed命令(实操篇) ✨ 本文为Linux系统文档编辑与文本处理命令的全面汇总与深度优化,结合图标、结构化排版与实用技巧,专为高级用户和系统管理员打造。 (关注不迷路哈!!&…

2026全新版Java面试八股文.pdf出炉, 简直把所有 Java 知识面试题写出来了

作为一个 Java 程序员,你平时总是陷在业务开发里,每天噼里啪啦忙敲着代码,上到系统开发,下到 Bug 修改,你感觉自己无所不能。然而偶尔的一次聚会,你听说和自己一起出道的同学早已经年薪 50 万,而…

【万字硬核】从GPT-5.2到Sora2:深度解构多模态大模型的“物理直觉”与Python全栈落地指南(内含Banana2实测)

摘要: 当我们在谈论大模型时 我们在谈论什么 是参数量的暴力美学 还是Transformer架构的无限延展 2025年的AI界 已经不再满足于文本的生成 GPT-5.2-Pro开始具备了逻辑推理的“慢思考”能力 Sora2与Veo3正在试图模拟物理世界的运行规律 而Banana2则在图像生成的语义理…

基于STM32的运动信息检测装置设计与实现

基于STM32的运动信息检测装置设计与实现 第一章 系统设计背景与需求分析 随着全民健身意识提升,运动数据的精准监测成为科学健身与健康管理的核心需求。传统运动检测设备如计步器,多依赖单一加速度传感器,存在参数片面、精度不足(…

基于高频信号注入的三相永磁同步电机无传感器控制仿真之旅

基于高频信号注入的三相永磁同步电机无传感器控制仿真;旋转电压输入的,PMSM;Matlab仿真在电机控制领域,三相永磁同步电机(PMSM)因其高效、节能等优点被广泛应用。然而,传统的PMSM控制往往依赖传…

技术筑基,生态先行:边界智能如何领跑中国区块链产业

数字经济浪潮下,区块链技术正重塑产业价值流转模式,成为驱动高质量发展的关键引擎。在这片充满机遇的赛道上,边界智能(BIANJIE.AI)凭借全方位的核心优势,稳居中国区块链行业龙头地位,排名持续领…

[SSM]SpringBoot

SpringBoot简介 入门案例 回顾SpringMVC开发的步骤 创建工程,并在 pom.xml 配置文件中配置所依赖的坐标 编写 web3.0 的配置类 编写 SpringMVC 的配置类 编写 Controller 类 从上面的 SpringMVC 程序开发可以看到,前三步都是在搭建环境,而…

MATLAB代码:基于二阶锥优化的电气综合能源系统多目标无功优化(配网设备模型及网损优化方案研究

MATLAB代码:基于二阶锥优化的电气综合能源系统多目标无功优化 关键词:配电网 无功优化 二阶锥 电气综合能源系统 参考文档:《含高比例光伏的配电网有功-无功功率多目标协调优化》参考部分配电网设备模型,非完全复现,…

数据库性能测试最佳实践

在当今数据驱动的时代,数据库作为企业应用的核心组件,其性能直接影响系统稳定性、用户体验和业务连续性。据统计,性能瓶颈导致的应用故障占比高达40%以上(源自2025年Gartner报告),而数据库往往是关键瓶颈点…

【必学收藏】智能体是什么?深入解析ReAct范式,助力AI开发者快速上手大模型智能体技术

本文解析AI智能体概念及ReAct范式,介绍不同来源对智能体的定义,详细阐述ReAct的核心思想——将推理与行动交错联合,形成Thought->Act->Observe工作流程。通过案例演示ReAct应用,探讨工具技术发展路径,总结智能体…

MSRP协议:即时通信中的多媒体传输基石

目录 一、协议起源与设计定位 二、协议架构与核心机制 2.1 传输层依赖与连接管理 2.2 消息格式与分片机制 2.3 状态报告与错误处理 三、协议优势与应用场景 3.1 突破传统限制的传输能力 3.2 灵活的拓扑支持 3.3 与SIP的深度协同 四、结语 在数字化通信飞速发展的今天…

腾讯云渠道商:如何在CVM 上手动搭建 LNMP 环境?

一、引言LNMP(LinuxNginxMySQLPHP)作为主流 Web 服务环境,在腾讯云 CVM 上部署仅需简单四步。本文避开复杂配置,提供极简搭建方案,助您快速构建网站运行基础。二、核心步骤1.系统准备登录 CVM 控制台创建 CentOS 实例S…

2026亲测成都有机肥供应厂家推荐

【有机肥】哪家好:专业深度测评在现代农业中,有机肥的使用越来越受到重视。为了帮助种植户选择合适的有机肥供应商,本文将对成都地区的有机肥供应商进行详细测评,重点推荐盖尔盖司。1. 测评背景与目的随着环保意识的增强和农业可持…

巴耶赫利俄语网站开发

巴耶赫利(bayeheli.com) 是一家专业的俄语网站开发团队,专注于为中国企业提供俄语市场数字化解决方案,帮助中国品牌出海俄罗斯。 核心服务 1. 俄语网站建设 定制化设计:根据俄罗斯用户习惯和文化背景设计界面 响应式布局:适配…

收藏!字节员工转岗大模型岗拿11W月薪,传统开发的AI风口逆袭指南

最近科技圈一个话题彻底火了——一位字节跳动的传统开发工程师,成功跨界转型算法大模型岗位后,直接在社交平台晒出了月薪11万的工资条。帖子一经发出,评论区瞬间被“羡慕哭了”“这波转型太值了”“我也想转”的留言刷屏,满屏的羡…

【异常】Antigravity工具提示One moment, the agent is currently loading...

一、报错内容二、报错说明 这是Antigravity工具的操作界面,当前处于智能代理(Agent)的加载状态,以下是其核心信息: 工具定位:Antigravity属于AI辅助开发类工具,核心是通过智能代理(A…

收藏!Agent全面爆发!万字长文吃透上下文工程(小白程序员入门必备)

1、 Agent全面爆发的前夜:上下文成为核心变量 1.1 从Chatbot到Agent:能力形态的本质跃迁 在大语言模型(LLM)大规模落地到实际产品之前,Chatbot(聊天机器人)是最主流的应用形态。这种形态的工作逻…