当前位置: 首页 > news >正文

JS-12-es6常用知识-async

 

目录

1. 定义与概述

2. 使用方法

3. 注意事项

4. 应用场景

 5. 示例代码

6.总结


   async 是 JavaScript(包括 TypeScript)中的一个关键字,用于声明一个函数为异步函数。async其实是一个promise的语法糖,以下是关于 async 的详细解释:

1. 定义与概述

  • 关键字async
  • 作用:声明一个函数为异步函数,允许函数内部使用 await 关键字等待 Promise 对象的完成。
  • 返回值:异步函数总是返回一个 Promise 对象,无论函数内部是否有显式的 return 语句。如果没有返回语句,函数会隐式地返回一个已解析(resolved)的 Promise,其值为 undefined

2. 使用方法

  • 声明:在函数定义前加上 async 关键字。

async function myAsyncFunction() {  // 函数体  
}
  • 与 await 配合使用:在 async 函数内部,可以使用 await 关键字等待一个 Promise 对象的完成,并获取其解析后的值。
async function fetchData() {  const data = await getDataFromApi(); // 假设 getDataFromApi 返回一个 Promise  console.log(data);  
}

3. 注意事项

  • 不要单独使用:如果函数被声明为 async 但没有使用 await,那么该函数将没有实际异步行为,但仍然会返回一个 Promise 对象。

  • 错误处理:异步函数内部可以使用 try...catch 结构来捕获由 await 表达式抛出的错误。

async function myAsyncFunction() {  try {  const data = await getDataFromApi();  // 处理数据  } catch (error) {  // 处理错误  }  
}
  • 返回值:如果 async 函数返回一个非 Promise 值,该值会被包装在一个已解析的 Promise 中。

4. 应用场景

  • 串行处理多个异步操作:使用 async/await 可以避免回调地狱和链式 .then() 方法带来的嵌套问题,使代码逻辑更加清晰、易于维护。
  • 处理 I/O 操作:在 Node.js 中,async/await 常用于处理文件 I/O、数据库查询、网络请求等异步操作。

 5. 示例代码

例1:认识async

<script>function f1() {return new Promise(resolve => {setTimeout(() => {console.log('你好');resolve();}, 1000);})}//这是上一篇文章提到的实现方法// f1().then(res=>{//     console.log('第二步');// })//async的实现(async function () {//await是表示这行代码是一个异步操作//下面的代码会在这个异步操作之后执行//  -->这里的异步操作执行完毕其实就是resloveawait f1();console.log('第二步');await f1();await f1();console.log('第三步');})()
</script>

例2:async处理返回值。

await必须是在async函数内部的

<script>function q() {return new Promise((resolve) => {setTimeout(() => {resolve("你好");}, 1000)})}//await必须是在async函数内部的var o1 = {say: async () => {console.log('say方法:');const res = await q();console.log(res);},run: async function () {console.log('run方法');const res = await q();console.log(res);}}//需求,先执行完毕say,再执行runvar fn = async function () {await o1.say();await o1.run();}fn();
</script>

例3:async错误处理try...catch

<script>function q(){return new Promise((resolve,reject)=>{setTimeout(()=>{reject("你好");},100)})}(async function(){try{let res = await q();console.log(res);}catch(e){console.log(e);}})()
</script>

6.总结

  1.  await可以执行异步操作,但是await必须在async函数内执行
  2. await操作可以有返回值,这个返回值表示promise操作成功的返回值
  3. 如果await里面执行的异步操作发生了reject,或者发生了错误,那么只能使用try...catch语法来进行错误处理

 

相关文章:

JS-12-es6常用知识-async

目录 1. 定义与概述 2. 使用方法 3. 注意事项 4. 应用场景 5. 示例代码 6.总结 async 是 JavaScript&#xff08;包括 TypeScript&#xff09;中的一个关键字&#xff0c;用于声明一个函数为异步函数。async其实是一个promise的语法糖&#xff0c;以下是关于 async 的详细…...

使用winscp 通过中转机器(跳板机、堡垒机)密钥远程连接服务器,保姆级别教程

1.winscp下载地址 winscp下载 2.安装自己选择位置 3.连接服务器 到这里,基本就是没有壁垒机的就可直接连接,传递文件 4.配置中转服务器(壁垒机、跳板机) 选择高级选项 配置utf-8的编码格式 配置中转服务器(壁垒机、跳板机) 设置中专机的密码或者私钥 配置私钥...

力扣-1984. 学生分数的最小差值

文章目录 力扣题目工程代码C实现python实现 力扣题目 给你一个 下标从 0 开始 的整数数组 nums &#xff0c;其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。 从数组中选出任意 k 名学生的分数&#xff0c;使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 。…...

激动人心的LayerDiffusion终于可以在ComfyUI中使用了

一、什么是LayerDiffusion 随着Stable Diffusion等散射模型的蓬勃发展,人工智能图形生成进入了一个崭新的阶段。我们可以仅仅通过文字提示,就可以让AI模型为我们生成逼真的图像。但是,目前主流的AI生成模型大多只能生成普通的RGB图像,对生成具有透明通道的图片能力还非常有限。…...

【JVM】finalize() 方法的定义与作用

finalize() 方法的定义与作用 定义 finalize() 方法是 Java 中的一种特殊方法&#xff0c;定义在 java.lang.Object 类中。它在对象被垃圾回收之前由垃圾回收器调用&#xff0c;用于执行清理操作。 方法签名&#xff1a; protected void finalize() throws Throwable作用 …...

这10个前端库,帮我在工作中赢得了不少摸鱼时间!!

文章目录 前言1、dayjs2、 lodash3、 Quill4、 crypto-js5、 viewerjs6、 localforage7、 vconsole8、 uuid9、 copy-text-to-clipboard10、 classnames前言 通过高效的工具提高工作效率,从而有更多的时间来处理其他重要的任务,或者……摸鱼。没错!就是摸鱼。毕竟,提高效率…...

(2024最新)CentOS 7上在线安装MySQL 5.7

在CentOS 7上安装MySQL 5.7并配置允许远程连接&#xff0c;以下是详细步骤&#xff1a; 1. 添加MySQL官方存储库 首先&#xff0c;下载并添加MySQL的官方存储库。默认情况下&#xff0c;添加的存储库可能会包含最新的MySQL版本&#xff08;如MySQL 8.0&#xff09;&#xff0c…...

【C++高阶】C++继承学习手册:全面解析继承的各个方面

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;模板进阶 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 继承 &#x1f4d6;1. 继承的概念及定义…...

使用GPT-soVITS再4060下2小时训练声音模型以及处理断句带来的声音模糊问题

B站UP主视频 感谢UP主“白菜工厂1145号员工”的“熟肉”&#xff0c;我这篇笔记就不展示整一个训练和推理流程&#xff0c;重点写的4060该注意的一些事项。如何解决断句模糊的问题&#xff0c;在本篇笔记的最末尾。 相关连接&#xff1a; 原项目github UP主的说明文档 1、训…...

如何对stm32查看IO功能。

有些同学对于别人的开发板的资源&#xff0c;或者IO口&#xff0c;或者串口等资源不知道怎么分配。 方法1、看硬石、野火、正点原子的开发板&#xff0c;看下他们的例子&#xff0c;那个资源用什么。自己多看几个原理图&#xff0c;多看几个视频&#xff0c;做一下笔记。以后依…...

docker构建jdk17镜像

资料参考 参考自黑马教程&#xff1a;10.Docker基础-自定义镜像_哔哩哔哩_bilibili 更多详细语法声明&#xff0c;请参考官网文档&#xff1a;https://docs.docker.com/engine/reference/builder 初步准备 1、下载jdk17包&#xff08;linux版&#xff09;&#xff0c;我这边版…...

Android Uri转File path路径,Kotlin

Android Uri转File path路径&#xff0c;Kotlin /*** URI转化为file path路径*/private fun getFilePathFromURI(context: Context, contentURI: Uri): String? {val result: String?var cursor: Cursor? nulltry {cursor context.contentResolver.query(contentURI, null…...

iOS界面设计要点:四大模块解析

UI设计不是艺术设计&#xff0c;这限制了我们从设备和现有技术开始设计。因此&#xff0c;熟悉每个平台的设计规则已经成为每个设计师的第一课&#xff0c;也是每个设计师必要的专业知识。 今天小边给您带来了iOS设计规范&#xff0c;希望帮助您快速熟悉iOS平台设计规范&#…...

数字取证技术(Digital Forensics Technology)实验课II

数字取证技术(Digital Forensics Technology)实验课II 本文是我本学期的教学课题目,不包含任何博客知识分享,无关的读者可忽略; 实验练习题 (♞思考):请对工作邮件进行签名;“problem3_1.txt"里存储的是由John Doe撰写的真实的邮件,而"problem3_2.txt"里存储的…...

Redis缓存的使用

1.缓存穿透 描述&#xff1a;查询数据在redis不存在&#xff0c;请求打到数据库 解决方法&#xff1a; 缓存空值 当出现Redis查不到数据&#xff0c;数据库也查不到数据的情况&#xff0c;我们就把这个key保存到Redis中&#xff0c;设置value"null"&#xff0c;并设…...

力扣LCP 08.剧情触发时间

力扣LCP 08.剧情触发时间 前缀和 二分 对increase求前缀和 在前缀和数组上做二分 找到符合要求的最小时间 class Solution {public:vector<int> getTriggerTime(vector<vector<int>>& increase, vector<vector<int>>& requirements)…...

Elasticsearch-IndexTemplate和DynamicTemplate 有什么区别

Elasticsearch中的Index Template和Dynamic Template是两种不同的概念&#xff0c;它们在索引管理中扮演不同的角色&#xff1a; ### Index Template&#xff08;索引模板&#xff09; 1. **目的**&#xff1a;用于定义新索引的默认设置&#xff0c;包括映射、设置、别名等。 …...

list集合自定义排序

一、基本类型排序 1.list中只有数字或字符串 //升序排序 List<T> ,T为数字或字符串 Collections.sort(list); //降序排序 Collections.sort(list,Collections.reverseOrder());2.list中为对象 基于jdk.18 import lombok.Data;Data public class User {private int i…...

PHP Cookies:应用与管理

在Web开发中&#xff0c;Cookies是一种在客户端&#xff08;通常是浏览器&#xff09;存储少量数据的机制。PHP作为一种服务器端脚本语言&#xff0c;提供了对Cookies的全面支持&#xff0c;使得开发者可以轻松地设置、读取和删除Cookies。Cookies通常用于存储用户的会话信息&a…...

【GD32F303红枫派使用手册】第十四节 DAC-输出电压实验

14.1 实验内容 通过本实验主要学习以下内容&#xff1a; DAC工作原理 使用DAC输出电压 14.2 实验原理 14.2.1 DAC工作原理 我们上几章学习了ADC&#xff0c;本章我们来学习DAC。ADC是模-数转换&#xff0c;即模拟量转换为数字量&#xff0c;DAC正好相反&#xff0c;即数-…...

java 使用Log4j进行日志记录

要在Java项目中使用Log4j进行日志记录&#xff0c;需要经过以下步骤&#xff1a; 添加Log4j依赖&#xff1a;在项目的pom.xml文件中&#xff0c;添加Log4j依赖。例如&#xff1a; <dependency><groupId>log4j</groupId><artifactId>log4j</artifa…...

【问题解决】adb remount 失败或刷机无法连接设备(KaiOS)

问题描述 1、设备无法adb remount成功&#xff0c; 2、通过fastboot无法识别设备&#xff0c;一直卡住 3、已经识别到9008端口&#xff0c;但是设备与刷机工具connect fail&#xff0c;甚至软件crash 解决方案 1、安装高通驱动工具&#xff1a;QDLoder HS-USB Driver QDLoade…...

为什么电容两端电压不能突变

我们先从RC延时电路说起吧&#xff0c;图1是最简单的RC延时电路&#xff0c;给一个阶跃的电压信号&#xff0c;电压会变成黄色曲线这个样子&#xff0c;这是为什么呢&#xff1f; 图1 电压跳变后&#xff0c;电源负极电子移动到电容下极板&#xff0c;排斥上极板电子流动到电源…...

Redux 与 MVI:Android 应用的对比

Redux 与 MVI&#xff1a;Android 应用的对比 在为 Android 应用选择合适的状态管理架构时可能会感到困惑。在这个领域中&#xff0c;有两种流行的选择是 Redux 和 MVI&#xff08;Model-View-Intent&#xff09;。两者都有各自的优缺点&#xff0c;因此在深入研究之前了解它们…...

《MySQL是怎样运行的》读书笔记(三) B+树索引

前言 从前面数据存储结构中我们已经知道了页和记录的关系示意图: 其中页a、页b、页c ... 页n 这些页可以不在物理结构上相连&#xff0c;只要通过双向链表相关联即可。 在正式介绍索引之前&#xff0c;我们需要了解一下没有索引的时候是怎么查找记录的。下边先只讨论搜索条件…...

微信小程序基础工作模板

1.轮播图 点击跳转官方文档 简单例子 <!-- 顶部轮播图 --> <swiper indicator-dots"true" class"banner" autoplay"true" interval"2000"><swiper-item><image src"../../images/轮播图1.jpg" >…...

简单说一下STL中的map容器的特点、底层实现和应用场景【面试】

特点&#xff1a; 基于红黑树&#xff1a;std::map利用红黑树的自平衡特性&#xff0c;确保操作的平衡性。有序容器&#xff1a;元素根据键的顺序自动排序&#xff0c;排序依据是预定义的键比较函数。唯一键值&#xff1a;容器保证每个键的唯一性&#xff0c;不允许重复键存在…...

Ubuntu22.04之有道词典无法画词翻译替代方案(二百四十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

AnythingLLM 的 Docker 使用

AnythingLLM是使用大语言模型LLM的一站式简便框架。官网的介绍如下&#xff1a; AnythingLLM is the easiest to use, all-in-one AI application that can do RAG, AI Agents, and much more with no code or infrastructure headaches. 1. 使用官方docker 最方便的方法是使…...

数组还可以这样用!常用但不为人知的应用场景

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…...

在什么网站做兼职/广西壮族自治区人民医院

文章目录Vue之 - 基本的代码结构和插值表达式Vue之 v-cloakVue指令之v-text和v-htmlVue指令之v-bind的三种用法Vue指令之v-on跑马灯效果Vue指令之v-on的缩写和事件修饰符使用.stop 阻止冒泡使用.capture 实现捕获触发事件的机制使用 .prevent 阻止默认行为使用 .self 实现只有点…...

网站开发工作安排/外包公司的优势和劣势

如何用python编写乘法口诀表&#xff1f;首先要明确一下思路&#xff0c;我们可以确定x,y两个变量&#xff0c;弄清楚其变化的规律&#xff0c;再使用循环嵌套实现。下面是如何用Python编写乘法口诀表的具体方法。第一种&#xff1a;使用for遍历循环嵌套for x in range(1,10):f…...

dede做双语网站/外链代发

KVM 是一个开源硬件虚拟化软件&#xff0c;通过该软件可以同时创建和运行多个基于 Linux 和基于窗口的虚拟机。KVM 是基于内核的虚拟机&#xff0c;当安装 KVM 包时&#xff0c;KVM 模块被加载到当前内核中&#xff0c;Linux 系统变成虚拟机管理程序。 检查系统的 CPU 是否支持…...

wordpress侧边栏广告/万能软文模板

第一场报告的汇报人是香港城市大学教授&#xff0c;IEEE Fellow&#xff0c;TEC主编Kay Chen Tan&#xff0c;题目是“如何基于高水平研究成果写出高水平论文”。作为IEEE Transactions on Evolutionary Computation 的主编&#xff0c;Kay Chen Tan指出&#xff0c;发表高水平…...

一个人在家做网站建设/自动点击器永久免费版

摘抄至: http://blog.csdn.net/xdrt81y/article/details/38926663 [[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; //建议在播放之前设置yes&#xff0c;播放结束设置NO&#xff0c;这个功能是开启红外感应 //添加监听 [[NSNotificationCenter defaultCent…...

安阳专业做网站公司/网络运营推广合作

1、 通过Context.getSharedPreferences(String fileName,int mode)方法&#xff0c;可以打开一个xml文件&#xff0c;文件的位置在/data/data/package_name/shared_prefs/fileName.xml&#xff0c;如果不存在&#xff0c;则会自动创建。可以对该文件进行读写操作&#xff0c;在…...