关于async/await

news2024/10/8 13:22:01

async/await是什么?

简单来说async/await是Promise的语法糖,async是异步的意思,await是等待的意思。async function 声明一个函数里面可能有异步代码需要执行,await则可以认为是等待一个异步方法执行完成。

async/await的用法

let people = {}
function getPeople1() {
    return new Promise((resolve, reject) => {
    //异步代码
        setTimeout(() => {
            data = { name: '张三', sex:'男' }
            resolve()
        }, 1000)
    })

}
function getPeople2() {
    return new Promise((resolve, reject) => {
    //异步代码
        setTimeout(() => {
            data = { name: 'lily', sex:'女' }
            resolve()
        }, 2000)
    })

}

function showPeople() {
    console.log(`正在展示获取到的数据:${JSON.stringify(people)}`);
}

async function handle() {
    await getPeople1()
    await getPeople2()
    showPeople()
}

handle()

在上面的代码中可以看到getPeople1和getPeople2两个函数中都有异步代码,用async/await来解决的话和在函数体内和使用then链解决一样,都需要return出一个Promise。不同的点就在于async新定义了一个异步函数,getPeople1和getPeople2两个函数在异步函数里面调用,然后在两个函数前面都加上await。

async/await的特点

  • async函数调用会返回一个Promise对象。
async function handle() {
    return 'hi'
}
const res = handle()
console.log(res);

执行结果:
在这里插入图片描述

  • await 必须写在 async 函数里面。
    async和await是配套使用的,await规定了要写在 async里面。
  • await 会阻塞下一行代码的执行,封装了Promise.then()。
    需要耗时的代码都是异步代码,await加在了有异步代码的函数前面,一定要等这个函数执行完毕了才会执行下面的代码,要不然就解决不了异步代码挂起的问题了。
  • await也会返回出一个Promise对象。
//await
function await() { 
  return Promise.resolve().then(() => {   
  })
}

async/await的优点——和Promise比较

  • 同步代码编写方式,能处理由多个Promise组成的 then 链,async/await从上到下顺序执行,更符合编写习惯。
  • 同步代码和异步代码可以一起编写,用Promise最好将同步代码和异步代码放在不同的then节点中,结构更加清晰,而用async/await整个书写习惯都是同步的,不需要纠结同步和异步的区别。
  • 语法简洁清晰,节省了很多不必要的匿名函数。
  • 减少不必要的中间变量,更清晰明确的错误堆栈。

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

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

相关文章

创建台虚拟机并安装上window10系统(NETBASE 第一课)

虚拟机(Virtual Machine)是一种基于软件的模拟技术,它可以将一台物理计算机模拟成多个虚拟计算机运行不同的操作系统和应用程序,从而实现资源的虚拟化和隔离。在虚拟机中,每个虚拟计算机都拥有自己的独立的操作系统和应…

MySQL基础篇第1章(数据库概述)

文章目录 1、为什么要使用数据库2、数据库与数据库管理系统2.1 数据库的相关概念2.2 数据库与数据库管理系统的关系2.3 常见的数据库管理系统排名2.4 常见的数据库介绍 3、MySQL介绍3.1 概述3.2 MySQL发展史重大事件3.3 关于MySQL 8.03.4 Oracle VS MySQL 4、RDBMS 与 非RDBMS4…

java的void和Void

java 函数如果什么类型的值也不需要返回,用关键字void。 而Void是一个类,是一个不能实例化的占位符类,它持有对一个类对象的引用,这个类对象代表java关键字void。 如果函数返回值是Void,那么函数必须明确返回null。 J…

将 jar 构建成 docker 镜像实例

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

Java的数据结构

目录 数据结构: 1,数组 2,链表 3,哈希表 4,队列 5,堆 6,栈 7,树 8,图 数据结构: 1,数组 优点: 查找元素的速度很快; 按照索引来遍历数组的速度也很快。 缺点: 数组大小无法改变,一旦创建就无法扩容; 数组只能存储一种数据类型的数据; 插入、修改、删除时比较麻烦&…

1-软件测试答疑

目录 1.什么是软件测试? 1.1.生活中测试场景 1.2.软件测试定义 1.3.为什么要有软件测试?/重要性 1.4.练习:软件系统登录功能如何测试? 1.5.软件测试的特点 2.软件测试和开发的区别 2.1.工作内容 2.2.技能要求 2.3.难易程…

spring监视器actuator

引入依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><…

第五章 神经网络与手写体识别

文章目录 第五章 神经网络5.1神经元模型5.2感知机与多层网络5.3误差逆传播算法5.4全局最小和局部最小5.5其他常见神经网络5.5.1RBF网络5.5.2ART网络5.5.3SOM网络5.5.4级联相关网络5.5.5Elman网络5.5.6Boltzmann机 5.6深度学习5.7实验&#xff1a;手写数字识别 第五章 神经网络 …

【QT】——QJson类的使用

目录 1.Json的格式 1.1.Json数组 1.2.Json对象 2.QJson 2.1 QJsonObject 2.2 QJsonValue 2.3 QJsonArray 2.4 QJsonDocument 3.示例 3.1 写操作 3.2 读操作 1.Json的格式 Json的基本概念 Json 是一种数据格式&#xff0c;和语言无关&#xff0c;在什么语言中都可以…

Host is not allowed to connect to this MySQL server

问题:win10 系统上运行node&#xff0c;运行提示&#xff1a;Host is not allowed to connect to this MySQL server。 在windows10上面装完MySQL8.0.28&#xff0c;发现本地可以使用Navicat进行连接 &#xff0c;但是在vue项目中调用node接口连接mysql却报错Host is not all…

Python学习笔记(十五)————文件操作相关

目录 1&#xff09;文件编码 2&#xff09; 文件的读取 ①open()打开函数 ② mode常用的三种基础访问模式 ③读操作相关方法 read()方法&#xff1a; readlines()方法&#xff1a; readline()方法&#xff1a;一次读取一行内容 for循环读取文件行 close() 关闭文件对象 wi…

simulink 结构体 bus creator

目录 结构体创建 bus creator 结构体引用Bus Selector 结构体赋值Bus Assignment 结构体对象 Bus 结构体数组打包Vector Concatenate 结构体数据存文件 结构体创建 bus creator 结构体引用Bus Selector 结构体赋值Bus Assignment 结构体对象 Bus 结构体数组打包Vector Co…

【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】

分析慢SQL的步骤 慢查询的开启并捕获&#xff1a;开启慢查询日志&#xff0c;设置阈值&#xff0c;比如超过5秒钟的就是慢SQL&#xff0c;至少跑1天&#xff0c;看看生产的慢SQL情况&#xff0c;并将它抓取出来explain 慢SQL分析show Profile。&#xff08;比explain还要详细…

手搭手入门Spring boot+Mybatis+达梦数据库(国产数据库)

环境介绍 软件版本DM数据库dm8_20230418_x86_win_64IDEAIntelliJ IDEA 2022.2.1JDK1.8Spring Boot2.7.13mybatis2.3.1 达梦&#xff08;国产数据库&#xff09;可以将数据库名和表名自动转换为大写(注意&#xff01;&#xff01;创建达梦数据库实例的时候配置是否有勾选大小写…

Android Glide自定义AppGlideModule,让Glide在app启动后基于定制化GlideModule加载,kotlin

Android Glide自定义AppGlideModule&#xff0c;让Glide在app启动后基于定制化GlideModule加载&#xff0c;kotlin project的build.gradle: buildscript {repositories {maven {url uri("https://plugins.gradle.org/m2/")}}dependencies {classpath("org.jet…

Maven高级(二)--继承与版本锁定

一.继承 1.目的&#xff1a;不同模块中经常需要用到同一个依赖&#xff0c;这样要在每个pom.xml中都引入对应的坐标&#xff0c;继承可以用来解决依赖引入重复的问题。 2.实现&#xff1a;我们可以在创建一个父工程&#xff0c;然后将多个模块来继承这个父工程。然后再将各个模…

功能需求-前端在合同页面显示图片印章

需求描述 需要在项目中的合同页面的指定位置显示一个配置好的图片印章&#xff0c;实现好的效果&#xff0c;如下&#xff1a; 实现方案 使用使用CSS的绝对定位position来实现&#xff0c;代码如下&#xff1a; <div id"FatherBuyer"><img :src"s…

SpringAOP切面是否可以改变被代理方法的返回类型?

SpringAOP切面能不能改变被代理方法的返回类型&#xff1f; 注意&#xff0c;这里的AOP使用的aspectjweaver <!--AOP核心依赖aspectjweaver--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></de…

【C++】 Qt-线程进程

文章目录 进程&#xff08;process&#xff09;线程&#xff08;Thread&#xff09;创建线程 进程&#xff08;process&#xff09; 在任务管理器中能看到进程Tab页下&#xff0c;将所有进程分为三类&#xff1a; 应用&#xff1a;打开的正在运行的软件。后台进程&#xff1a…

STM32寄存器点亮LED灯

一&#xff1a; 如何寄存器点灯 1&#xff1a;看单片机的原理图 找到LED灯 这个灯是 PB5引脚 看原理图可以看出 让GPIOB5输出低电平 就能点亮那么我们得让打开控制GPIOB5的时钟让GPIOB5 输出模式让GPIOB5低电平 二&#xff1a;看中文参考手册配置寄存器 2.1&#xff1a;打开管…