async、await 官宣:JavaScript 中的异步编程新纪元

【作者主页】:小鱼神1024

【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等

async/await 是 ECMAScript 2017 标准中引入的一种用于处理异步操作的语法糖。它基于 Promise 和 Generator,并提供了一种更简洁、更直观的方式来编写异步代码。

async/await 的基本用法

定义一个异步函数,使用 async 关键字修饰函数声明

async function fetchData() {// 异步操作的代码
}

在异步函数内部,使用 await 关键字等待一个 Promise 对象的完成,并将其结果返回

async function fetchData() {const result = await someAsyncOperation();// 使用 result 处理异步操作的结果
}

在异步函数内部,使用 try…catch… 语句处理异步操作的错误

async function fetchData() {try {const result = await someAsyncOperation();// 使用 result 处理异步操作的结果} catch (error) {// 处理异步操作的错误}
}

async/await 案例

  • 如果要使用 await ,其所在的函数前要加上 async
  • 如果函数用 async "修饰"过,其函数本身就是 Promise ,可以使用.then 方法操作
  • 如果要捕获错误,可以用 try catch
async function fetchData() {try {const response = await fetch("https://api.example.com/data");const data = await response.json();// 处理获取到的数据return data;} catch (error) {// 处理错误throw new Error("Failed to fetch data");}
}async function main() {try {const data = await fetchData();// 使用获取到的数据console.log(data);} catch (error) {// 处理错误console.error(error);}
}main();

async/await 实现原理分析

async/await 的实现原理可以简单概括为以下几个步骤:

  • 将异步函数转换为一个返回 Promise 的普通函数:当定义一个异步函数时,JavaScript 引擎会将其转换为一个普通函数,该函数返回一个 Promise 对象。这个 Promise 对象表示异步操作的最终结果。
  • 使用 Generator 函数实现暂停和恢复:在异步函数内部,使用 Generator 函数来实现暂停和恢复的功能。Generator 函数是一种特殊的函数,可以通过 yield 关键字将函数的执行暂停,并通过 next() 方法将函数的执行恢复。
  • 使用 Promise 对象管理异步操作的状态:在异步函数内部,使用 Promise 对象来管理异步操作的状态。当遇到 await 关键字时,会将后面的表达式转换为一个 Promise 对象,并等待该 Promise 对象的状态变为完成。如果 Promise 对象的状态变为拒绝,会抛出一个错误。
  • 通过递归调用实现异步操作的串行执行:在异步函数内部,通过递归调用来实现异步操作的串行执行。当遇到 await 关键字时,会等待前一个异步操作完成后再执行下一个异步操作。

总的来说,async/await 的实现原理是基于 Promise 和 Generator 函数的组合使用。它通过将异步操作转换为 Promise 对象,并使用 Generator 函数来实现暂停和恢复的功能,从而实现了以同步的方式编写异步代码的效果。

function delay(ms) {return new Promise((resolve) => setTimeout(resolve, ms));
}async function fetchData() {try {console.log("Fetching data...");await delay(2000); // 模拟异步操作console.log("Data fetched!");return "Data";} catch (error) {console.error("Failed to fetch data:", error);throw error;}
}async function main() {try {console.log("Start");const data = await fetchData();console.log("Received:", data);console.log("End");} catch (error) {console.error("Error:", error);}
}main();

async/await 与 Promise 的区别

  • async/await 是基于 Promise 实现的,它们的行为基本相同
  • async/await 使得异步代码看起来像同步代码,这正是它的魔力所在
  • async/await 使得异步代码的异常处理变得更加简单

创作不易,动动您发财的小手,点赞关注一波,支持我创作更多对您有帮助的文章!

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

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

相关文章

Cesium czml创建目标

一次性加载 (method) DataSourceCollection.add(dataSource: Cesium.DataSource | Promise<Cesium.DataSource>): Promise<Cesium.DataSource>const czml [{id: "document",name: "CZML Point",version: "1.0",clock: {"inte…

02逻辑代数与硬件描述语言基础

2.1 逻辑代数&#xff08;简单逻辑的运算&#xff09; 2.2 逻辑函数的卡诺图&#xff08;从图论的角度&#xff09;化简法 2.3 硬件描述语言Verilog HDL基础&#xff08;研究生阶段才用得到&#xff09; 要求&#xff1a; 1、熟悉逻辑代数常用基本定律、恒等式和规则。 2、掌握…

武汉高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

随着科技的不断进步和工业4.0的深入推进&#xff0c;智能制造已成为现代工业发展的重要方向。在这一背景下&#xff0c;武汉高校大学智能制造实验室积极响应国家号召&#xff0c;致力于将先进的数字孪生技术与智能制造教育相结合&#xff0c;打造了一个集教学、实训、科研于一体…

【JavaScript】事件绑定

目录 一、什么是事件 二、常见事件 2.1 鼠标事件 2.2 键盘事件 2.3 表单事件 2.4 页面加载事件 三、浏览器弹窗三种方式 四、事件绑定函数方式 五、事件触发方式 一、什么是事件 事件就是行为动作。在HTML中事件可以是浏览器的行为&#xff0c;也可以是用户的行为。当这些行为发…

基于esp-idf的arm2d移植

什么是ARM2D Arm在Github上发布了一个专门针对“全体” Cortex-M处理器的2D图形加速库——Arm-2D 我们可以简单的把这个2D图形加速库理解为是一个专门针对Cortex-M处理器的标准“显卡驱动”。虽然这里的“显卡驱动”只是一个夸张的说法——似乎没有哪个Cortex-M处理器“配得上…

丝杆支撑座:滚珠丝杆稳定运行的守护者!

丝杆支撑座是丝杆和电机之间连接的重要组成部分&#xff0c;发挥着非常重要的功能。提到丝杆支撑座和滚珠丝杆&#xff0c;很多人都会想到支撑关系&#xff0c;但丝杆支撑座作为滚珠丝杆系统中至关重要的角色&#xff0c;其作用远不止于简单的支撑。 丝杆支撑座安装过程非常简单…

绘唐3是免费的吗?

绘唐科技是一家中国电子信息产品制造商和供应商&#xff0c;成立于2005年。公司主要经营智能硬件、智能穿戴设备、智能家居设备和智能交通设备等领域的产品开发和销售。绘唐科技拥有强大的研发团队和制造能力&#xff0c;能够为客户提供定制化的产品解决方案。 绘唐科技的产品种…

CS-隐藏防朔源-数据转发-iptables(Linux自带的防火墙)

免责声明:本文仅做技术交流与学习... 目录 准备环境: 1-iptables转发机设置转发: 2-CS服务器配置iptables服务器的IP 准备环境: 两台外网服务器. --iptables服务器就是做一个中转...封了中转就没了... 1-iptables转发机设置转发: iptables -I INPUT -p tcp -m tcp --dport 8…

一个简化的C语言扫地机器人系统编写步骤

使用C语言直接编写一个完整的智能扫地机器人系统是非常复杂的&#xff0c;因为这不仅涉及到底层硬件的控制&#xff0c;还包括网络通信、用户交互等多个方面。然而&#xff0c;我们可以将任务拆分为几个部分&#xff0c;并专注于使用C语言编写与硬件交互和可能的一些基础网络通…

ACC:Automatic ECN Tuning for High-Speed Datacenter Networks 相关知识点介绍(一)

目录 ACC&#xff08;Adaptive Congestion Control&#xff09; 总结 结合 ACC 和 ECN ECN ECN&#xff08;Explicit Congestion Notification&#xff09; 静态 ECN 动态 ECN 对比 总结 FCT——flow completion time 具体解释 小鼠流和大象流 小鼠流&#xff08;…

【最新综述】基于伪标签的半监督语义分割

Semi-Supervised Semantic Segmentation Based on Pseudo-Labels: A Survey 摘要&#xff1a; 语义分割是计算机视觉领域的一个重要而热门的研究领域&#xff0c;其重点是根据图像中像素的语义对其进行分类。然而&#xff0c;有监督的深度学习需要大量数据来训练模型&#xff…

GPT-5的到来:智能飞跃与未来畅想

IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂确认了GPT-5的发布计划&#xff0c;预计将在一年半后推出。穆拉蒂形象地将GPT-4到GPT-5的飞跃比作高中生到博士生的成长。这一飞跃将给我们带来哪些变化&#xff1f;GPT-5的…

电路笔记(电源模块):TPS82130降压模块

芯片引脚说明 Layer 1 1 2 3 4 5 6 7 8 SS/TR PG FB VOUT EN VIN GND VOUT Thermal Pad 使能引脚&#xff0c;高电平启动。 反馈参考引脚。 连接到该引脚的外部电阻分压器对输出电压进行编程。 电源开漏输出引脚。 软启动和电压跟踪引脚。 上拉电阻可以连接到任何低于6V的电压。…

如何使用WxPusher向个人微信推送发送实时消息,比如定时任务等

wxpusher-sdk-java这个框架开源了&#xff1a;GitHub - wxpusher/wxpusher-sdk-java: 微信消息实时推送服务[WxPusher]的Java版本sdk&#xff0c;可以通过API实时给个人微信推送消息。wechat pusher. 文档地址&#xff1a;WxPusher微信推送服务 WxPusher (微信推送服务)是一个…

Spring Boot与MyBatis的集成应用

Spring Boot与MyBatis的集成应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来聊聊Spring Boot与MyBatis的集成应用。MyBatis是一款优秀的持久层框…

湖北大学2024年成人高考函授报名专升本教育学专业介绍

湖北大学&#xff0c;作为一所历史悠久、文化底蕴深厚的学府&#xff0c;其成人高等继续教育体系更是为广大学子提供了一片展翅高飞的蓝天。在这片知识的海洋中&#xff0c;专升本教育学专业如同一颗璀璨的明珠&#xff0c;闪耀着智慧的光芒。 湖北大学的专升本教育学专业&…

Postgresql从小白到高手 九 : psql高级查询及内部视图使用

Postgresql从小白到高手 九:pgsql 复杂查询及内部表高级查询 文章目录 Postgresql从小白到高手 九:pgsql 复杂查询及内部表高级查询一、多表查询二、pgsql内部表1.内部表2.内部表查询应用 一、多表查询 内联 &#xff1a;inner join on 简写 join on 结果集只有符合 筛选条件…

AI Native应用中的模型微调

AI Native应用中的模型微调 随着人工智能技术的飞速发展&#xff0c;AI Native应用已成为当今软件开发的前沿阵地。在AI Native应用中&#xff0c;模型微调是提升模型性能的关键步骤&#xff0c;它通过在特定领域的数据上进行学习&#xff0c;使模型更好地适应应用场景&#x…

Android U Settings 应用中 APN 菜单实现的代码逻辑

功能简介 MobileNetwork移动网络设置页面下有【接入点设置】(APN)。 问题:为什么Controller初始化找不到pref,然后报错。 Note:什么时候切换成Controller的呢?在Android T&U 上还没有更新成kt实现 ,但是已经有Controller的方案。 流程逻辑 1、界面“telephony_a…

软件可重用的“rule-of-three“

《软件工程的事实与谬误》《Facts and Fallacies of Software Engineering》中提到&#xff1a; 软件可重用有两个“三规则”&#xff1a; 构建可重用组件的难度是一次性组件的三倍一个可重用的组件应该在三个不同的应用程序中试用&#xff0c;然后它才会足够通用以接受到一个…