async/await详解

news2025/1/22 13:11:08

🐱个人主页:不叫猫先生
🙋‍♂️作者简介:专注于前端领域各种技术,热衷分享,期待你的关注。
💫系列专栏:vue3从入门到精通
📝个人签名:不破不立

🍬本文目录

  • 🥙一、简介
  • 🥪二、async
  • 🌮三、await
  • 🍔四、案例
  • 🥪附:直接量/字面量

🥙一、简介

async/await是ES20717引入的,主要是简化Promise调用操作,实现了以异步操作像同步的方式去执行,async外部是异步执行的,同步是await的作用。

🥪二、async

async,英文意思是异步,当函数(包括函数语句、函数表达式、Lambda表达式)前有async关键字的时候,并且该函数有返回值,函数执行成功,那么该函数就会调用Promise.resove()并隐式的返回一个Promise对象;如果函数执行失败就会调用Promise.reject()并返回一个Promise对象。

Promise.resolve(x) 可以看作是 new Promise(resolve => resolve(x)) ,可将字面量对象或其他对象快速封装成 Promise 实例

  1. async函数中如果有异步操作会进行等待,但是async函数本身会马上返回,不会阻塞当前线程。async函数被调用不会阻塞界面渲染,内部由await关键字修饰异步过程,会阻塞等待异步任务的完成再返回。
  2. 如果在函数中return一个直接量,async会把这个直接量通过Promise.resolve(直接量) 封装成 Promise 对象 ,如果没有返回值,相当于返回了Promise.resolve(undefined)。
  3. 通过Promise回调得到async函数的返回值 ,通过Promise回调得到async函数的返回值,因为该函数返回的是Promise对象
async func(){
     return "a"
}

console.log(func())
func().then(res=>{
   console.log(res) //通过回掉获取到 a
 }.catch(err=>{ }))

func()的返回值如下,由此可见返回的是一个Promise对象。
Promise {: 'a'}
[[Prototype]]: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: "a"

🌮三、await

  1. 使用await时,一定要配合async使用 ,这样才能使异步代码同步化,await英文为等待,意思就是等待await后面的函数(该函数返回的是Promise对象)执行完之后,在之后后面的代码。
  2. await后面也可以跟同步代码 ,这样做的话意义不大,增加了系统处理逻辑,系统会自动将其转化成一个Promsie对象。比如:
const a = await '1';
const a = await Promise.resolve('1');//跟上面效果效果相同
//await后跟同步代码,不如不使用await,增加了代码逻辑,没有意义
const a = '1';
  1. await在等返回值,后面可以是字面量或者函数表达式。如果表达式的运算结果不是Promise对象,那么该结果就是await等的值; 如果await后是一个Promise对象,那么就会阻塞后面代码的运行 。但是async函数的调用并不会阻塞,它内部所有的阻塞都封装在Promise对象中异步执行。

  2. await只处理resolve(data)时的数据,不处理reject(error) ,当异步函数体内出错的时候,怎么捕获到错误信息呢?

  • 可以让await后的函数通过catch获取
  • 通过最外面的func函数的catch获取
  • func函数体内使用try…catch…,然后从catch获取, try…catch可获取 async 函数内,任意 await 的错误,其中一个被拒绝,便会暂停,返回错误信息
async function func(){
   const a = await asyncFunc();
}
asyncFunc().then().catch()
async function func(){
   const a = await asyncFunc();
}
func().then().catch()
async function func(){
   try(){
       const a = await asyncFunc();
   }catch(error){ }
}

🍔四、案例

async function func(){
   console.log('a')
   const c = await 'c'
   console.log(c)
   return 'd'
}
func().then(res=>console.log(res))
console.log('b')

输出:
在这里插入图片描述
先输出a后输出b,说明async函数执行后会立即返回,不阻塞线程。

🥪附:直接量/字面量

文中提到了字面量,博文在这里做下介绍。
字面量又称之为直接量,代码中固定值的表示方法,程序中直接使用的数据,没进行过封装。可分为字符串字面量(string literal)、数组字面量(array literal)、对象字面量(object literal),函数字面量(function literal)。 一般除去函数表达式,在给变量赋值时,可以理解为=号右边的数据

var a = "1";
var b = [1];
var c = {};
var d =function (){} // function() 为匿名函数

注意:函数字面量一般为匿名函数,但是语法也支持定义函数名。

var d =function func(){} 

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

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

相关文章

面向对象(高级)

目录 1. 类变量和类方法(静态变量) 类变量(静态变量) 内存刨析: 注意事项和使用细节: 类方法(静态方法): 使用场景: 注意事项和细节讨论: …

净亏损2.9亿元,财务业绩陷入困境后,逸仙电商盈利仍遥遥无期

来源:猛兽财经 作者:猛兽财经 逸仙电商概况 逸仙电商(YSG)是一家开曼群岛控股公司,通过与可变利益实体(“VIE”)的合同协议,在中国生产和销售化妆品和美容产品。公司结构如图所示。 逸仙电商成立的目的是…

不懂Hybird开发,感觉错过一个亿~

从当前移动开发的实际情况来看,移动端的开发方式三分天下:纯原生(Native App)、混合开发(Hybird App)、网页应用(Web App)。 ​ 纯原生(Native App)&#xff…

附录10-JS正则

在JS中有多种内置方法可以使用正则表达式,比如说match,exec,test等 文章参考 第十四章 吃通js正则表达式,javascript前端工程师必会技能_哔哩哔哩_bilibili 目录 1 正则常用方法 1.1 exec的简单使用 1.1.1 基本使用 1.1.2 lastIndex属性 1.1.…

Android Activity跳转

实现点击按钮,发送消息并跳转到另一个Activity MainActivity添加SendMessage方法 const val EXTRA_MESSAGE "com.example.myfirstapp.MESSAGE"class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super…

【C++】string的使用

文章目录一、前言二、标准库中的string类三. string类的常用接口1. 构造函数2. 容量操作3. 访问遍历4. 修改操作5. 其他操作一、前言 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数&#xff0…

ubuntu18.04服务搭建yolov5开发环境

文章目录1. 系统和显卡信息2. 下载安装CUDA2.1 1cuda环境变量配置1. 系统和显卡信息 (1) 系统信息 kanditelpo-System-Product-Name:~$ cat /proc/version Linux version 4.15.0-191-generic (builddlcy02-amd64-032) (gcc version 7.5.0 (Ubuntu 7.5.…

PDF如何转Word?分享几个实用办公软件给你

PDF是我们常用的文件格式,因为它的兼容性好,在手机、电脑查看文件都不影响文件的格式与内容。并且它的保密性也好,因为它无法在线更改文件内容,但这也说明了,我们如果需要对其进行更改的话,将需要把PDF格式…

解决Vue3中echarts无法缩放的问题

这里写自定义目录标题前言问题描述官网示例正常官网示例在本地缩放异常灵光乍现问题解决前言 实际工作中,使用到vue和echarts技术。项目原来用的vue2echarts4,后来更新到了vue3echarts5,结果遇到echarts无法绽放的问题。 问题描述 官网示例…

PDF、Word、Excel文件前端预览实操干货都在这!

随着Odoo在各个行业领域的深入应用,对Odoo的前端交互体验要求也越来越高。 我们在项目开发中常常会遇到,需要上传文件并预览的问题。 这里是我遇到的需求,并完成的一个小demo。 在Odoo中实现文件上传 首先我们需要在qweb页面中加入上传的…

Chrome浏览器插件开发v3版本第二篇:改变页面布局案例

跟着官方教程走才是硬道理:https://developer.chrome.com/docs/extensions/mv3/getstarted/tut-focus-mode/ 老规矩,搭建基本的项目结构:创建一个manifest.json文件 {"manifest_version":3,"name":"Focus",&…

[附源码]Python计算机毕业设计宠物销售管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

SQL Server中row_number函数用法介绍

一、SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数。 行号以每个分区中第一行的行号开头。 语法实例: select *,row_number() over(partition by column1 order by column2)…

PaddlePaddle飞浆搭建和机器学习文字识别

PaddlePaddle飞浆搭建和机器学习文字识别 文章转自:https://lingkang.top/archives/paddlepaddle-fei-jiang-da-jian-he-ji-qi-xue-xi-wen-zi-shi-bie 官网:https://www.paddlepaddle.org.cn/ 飞桨(PaddlePaddle)以百度多年的深…

第七章:Springmvc中applicationContext.xml配置文件应用上下文详解

主要配置程序的总体用上下文,让容器对全局掌握来龙去脉 1.扫描所有项目的包名 2.配置项目所有的静态资源映射 3.配置请求方法的映射驱动 4.配置适配器适配RequestMapping注解标注的Handler(HandlerMethod类型) 5.配置消息转换器决定浏览器以什…

Unity游戏Mod/插件制作教程04 - 如何创建配置文件

ConfigEntry<T> 在插件功能的设计中&#xff0c;经常会有需要玩家自己配置的东西&#xff0c;比如插件的各种设置&#xff0c;快捷键的分配等。在BepInEx中&#xff0c;提供了一个ConfigEntry类简化了配置操作。 我们来看一段示例&#xff1a; (注:由于阿B在代码页中会…

Docker的网络模式

一、Docker网络 1.1 Docker网络实现原理 docker 使用linux 桥接&#xff0c;在宿主机虚拟一个docker 容器网桥&#xff08;docker0) &#xff0c;docker 启动一个容器时会根据docker 网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker 网桥…

JAVA接入OPC DA2.0引发的问题

背景&#xff1a; JAVA接入OPC DA后&#xff0c;在生产环境跑了一段时间后就会出现异常&#xff0c;给折腾的够呛&#xff0c;起初的报错还能通过重启OPC连接解决&#xff0c;后来强制重新连接也不行&#xff0c;最终一套测试下来&#xff0c;除非重启OPC服务器&#xff0c;别…

生产制造企业数字化转型:流程制造ERP

ERP的含义是企业资源计划&#xff0c;含义是对企业所拥有各种资源进行综合规划和优化管理&#xff0c;用以降低成本&#xff0c;提高效率&#xff0c;增加利润。ERP最初是在90年代初提出的&#xff0c;那时的ERP概念&#xff0c;还只是根据计算机技术的发展和供需链管理,推论各…

[附源码]java毕业设计校园闲置物品租赁系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…