async/await详解

article/2025/9/14 8:42:24

🐱个人主页:不叫猫先生
🙋‍♂️作者简介:专注于前端领域各种技术,热衷分享,期待你的关注。
💫系列专栏: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://chatgpt.dhexx.cn/article/rtlwTmI6.shtml

相关文章

C# 中的Async 和 Await 的用法详解

1 众所周知C#提供Async和Await关键字来实现异步编程。在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await。 写在前面 自从C# 5.0时代引入async和await关键字后,异步编程就变得流行起来。尤其在现在的.NET…

async、await

词法定义 async async 是“异步”的简写, async 用于申明一个异步的 function await await 可以认为是 async wait 的简写,await 用于等待一个异步方法执行完成。 借检https://www.cnblogs.com/airen123/p/9543490.html 特点: asayc的用…

C# 彻底搞懂async/await

关键: 异步方法:在执行完成前立即返回调用方法,在调用方法继续执行的过程中完成任务。 async/await 结构可分成三部分: (1)调用方法:该方法调用异步方法,然后在异步方法执行其任务的…

async、await总结

一、async用法 async作为一个关键字放到函数前面,用于表示函数是一个异步函数。异步函数也就意味着该函数的执行不会阻塞后面代码的执行。 异步函数语法很简单,就是在函数前面加上async 关键字,来表示它是异步的。 那怎么调用呢?a…

async和await

async和await 概念 先从字面意思来理解。async 是“异步”的简写,而 await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。 另外还有一个很有意思的语法规定&#xff0…

被说一知半解,await不懂你别乱用

文章目录 1.前言2.await是否阻塞主线程?3.await是否同步?4.总结 1.前言 这篇文章我是不想写的,因为之前已经写过了(异步回调Async Await与Promise区别),此时此刻的心情是非常的不满,为什么呢&a…

async、await详解

一、async/await是什么? 简而言之, async用于申明一个function是异步的; 而await则可以认为是 async await的简写形式,是等待一个异步方法执行完成的。 二、async和await的基础使用 async/awiat的使用规则: async 表示这是一个a…

理解异步函数async和await的用法

定义 1. async 是异步的意思,await则可以理解为 async wait。所以可以理解async就是用来声明一个异步方法,而 await是用来等待异步方法执行 2. async作为一个关键字放在函数前面,表示该函数是一个异步函数,异步函数意味着该函数的…

(一)概述:NGS测序在病原微生物检测中的应用

❝ NGS 技术在临床上的应用逐步趋于成熟,从早期的肿瘤基因检测,到如今大热的微生物病原核酸检测,NGS 技术以其快速、准确和高分辨率的特点,发挥着无可替代的作用。 ❞ 微生物在地球上无处不在,从陆地到海洋&#xff0c…

肿瘤NGS测序公司生信工程师水平划分

生信工程师能力划分 1、大头兵(1)初级生信工程师工作职责任职要求 (2)中级生信工程师工作职责任职要求 (3)高级生信工程师工作职责任职要求 2、主管/经理职位描述任职要求 3、总监参考资料: 去年…

NGS数据分析实践:04. 准备测序数据

NGS数据分析实践:04. 准备测序数据 文接上篇:NGS数据分析实践:03. 涉及的常用数据格式[5] - vcf格式 本次NGS数据,采用多重PCR靶向扩增子测序技术,在Illunima Hiseq X Ten测序平台上进行双末端(paired-end…

NGS_panel的CAP认证学习笔记

对于基因的定义总体可以划分为两类 GAD: Gene associated with Mendelian disorder; GADs include genes that meet criteria for definitive, strong, or moderate evidence for association with disease as described by ClinGenGUS: Gene of uncertain significance; GUSs …

45万例患者基因检测显示:NGS很难检测出七分之一的致病变异

基于下一代测序(NGS)的临床基因测试越来越多地用于辅助诊断,针对该技术的临床应用有具体的指南,除了检测相对可靠的单核苷酸变异(SNVs)和微小插入缺失(indel),NGS也已经被…

R实战 | NGS数据时间序列分析(maSigPro)

masigpro 跟着Cell学作图 | 6.时间序列分析(Mfuzz包) 一个答疑教程。 maSigPro 流程 示例数据 #BiocManager::install(maSigPro) library(maSigPro) # 载入示例数据 data(data.abiotic) data.abiotic[1:5,1:5] data(edesign.abiotic) head(edesign.abiotic) > data.abiotic…

NGS数据分析实践:03. 涉及的常用数据格式[5] - vcf格式

NGS数据分析实践:03. 涉及的常用数据格式[5] - vcf格式 6. vcf格式6.1 vcf格式整体描述6.2 第8列INFO详解6.3 第9列FORMAT详解6.4 vcf文件简单解读 系列文章: 二代测序方法:DNA测序之靶向重测序 NGS数据分析实践:00. 变异识别的基…

生信小白学习日记Day4Day5——NGS基础 NGS分析注释(BWA软件)

2019年5月30日,晚上,心情变好,好几天没更新了,看到男朋友在学一款软件,我也近朱者赤,来继续注释Day2-2中NGS分析流程中的一个重要软件——BWA NGS基础 NGS分析注释 BWA 对应于NGS分析流程的这两步&…

NGS数据分析实践:00. 变异识别的基本流程

NGS数据分析实践:00. 变异识别的基本流程 变异识别过程可以分成3大块:1. 原始数据质控;2. 数据预处理;3. 变异识别。大致可以细分为6个部分:(1) 原始测序数据的质控;(2) read比对,排序和标记PCR…

如何用软件模拟NGS数据

如何用软件模拟NGS数据 为了评价一个工具的性能,通常我们都需要先模拟一批数据。这样相当于有了参考答案,才能检查工具的实际表现情况。因此对于我们而言,面对一个新的功能,可以先用模拟的数据测试下不同工具的优缺点。有如下几个…

生信小白学习日记Day2——NGS基础 illumina高通量测序原理

2019年5月26日,周日,小雨 说明:阅读生信宝典和查阅文章的总结,原文请关注公众号生信宝典,参考的博文都附有链接,仅供参考。 生信宝典 NGS基础——高通量测序原理 本文介绍了测序文库构建原理、链特异性文…

NGS数据分析实践:05. 测序数据的基本质控 [2] - MultiQC

NGS数据分析实践:05. 测序数据的基本质控 [2] - MultiQC 2. MultiQC2.1 帮助信息及运行代码2.2 报告解读2.3 小结 文接上篇:NGS数据分析实践:05. 测序数据的基本质控 [1] - FastQC 2. MultiQC NGS技术的进步催生了新的实验设计、分析类型和极…