async和await的使用

news2024/11/17 21:42:57

async和await是promise的一种语法糖,也就是更简单易懂的写法。

在很多项目中,你会经常看到async和await的配合使用,看到原始的promise写法反而不多,就是因为async-await这种写法是用同步的语法去实现异步的逻辑。

基础使用

原生promise写法

        let value = null
        let proFn = new Promise((resolve,reject)=>{
            setTimeout(()=>{
              resolve('成功的值')
            },2000)
        })
        proFn.then(res=>{
            value = res
            console.log(value,'异步返回值')
            //...value获取到了值,可以处理后续的业务逻辑
        })

async和await的写法

        let proFn = ()=>{
            return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('成功的值')
            }, 2000)
        })
        } 
        async function getVal(){
            let value = await proFn() //这条语句执行完毕,后续的代码都需要等value获取到了promise返回的值,才会开始去执行
            console.log(value,'获取到了值')
            //...可以执行后续的业务
        }
        getVal()

两者执行结果都是一样的

async

作用

async需要在函数上使用,本质是Generator 函数的语法糖。

一旦某个函数使用了async,那么这个函数的返回值就会被包装成一个promise函数

        let fn = async function(){
            return '函数返回值'
        }
        console.log(fn(),'调用fn函数')
        fn().then(res=>{
            console.log(res,'获取值')
        })

语法

async写在函数定义的时候,可以有如下写法

        let fn1 = async function(){
            return '普通函数1'
        }
        async function fn2(){
            return '普通函数2'
        }
        async ()=> '箭头函数'
        class Fn{
            constructor(){

            }
            async fn(){
                return '类中的方法'
            }
        }

await

使用条件

 await是不可以单独去使用的,是需要和async函数去配合使用的

        let pro = function(){
            return new Promise(res=>{
                res('成功的值')
            })
        }
        let value = await pro()

 

参数类型

await命令后面可以绑定两种类型的参数,一种是常规类型,一种是promise类型

        let pro = async function(){
            let value = await '常规值'
            console.log(value,'await返回常规值')
        }
        pro()

        let pro = async function(){
            let value = await new Promise(res=>{
                setTimeout(()=>{
                    res('promise执行成功的值')
                },3000)
                
            })
            console.log(value,'await绑定promise实例')
        }
        pro()

处理错误

async-await在处理错误时,可以使用try catch语法配合

        async function pro(){
            try{
               let value =  await new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    // resolve('成功')
                    reject('失败')
                },3000)
            })
            return value
        
            }catch(error){
              console.log(error,'进入catch')
              return error
            }

        }
        pro().then(res=>{
            console.log(res,'执行完毕')
        }).catch(error=>{
            console.log(error,'报错回调')
        })

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

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

相关文章

最新腾讯云2核2G轻量服务器性价比首选62元一年!

继昨天阿里云2核2G3M带宽轻量应用服务器降价到63元后,腾讯云迅速做出响应,腾讯云轻量2核2G3M服务器降价到62元一年,1元之差,你选择阿里云还是腾讯云?值得一提的是,阿里云不限制月流量,但是腾讯云…

【廖雪峰Java】Java基础知识

学习课程:廖雪峰的官方网站:https://www.liaoxuefeng.com/ 1、简介 1.1、Java之父 詹姆斯高斯林(James Gosling) 1.2、Java三个不同版本 Java SE:Standard EditionJava EE:Enterprise EditionJava ME&a…

openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作

文章目录 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作174.1 事务隔离说明174.2 写入和读写操作174.3 并发写入事务的潜在死锁情况 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作 174.1 事务隔离说…

生存分析序章2——生存分析之Python篇:lifelines库入门

目录 写在开头1. 介绍 lifelines 库1.1 lifelines库简介1.2 安装与环境配置 2. 数据准备2.1 数据格式与结构2.2 处理缺失数据2.3 对异常值的处理 3. Kaplan-Meier 曲线3.1 使用 lifelines 绘制生存曲线3.2 曲线解读3.3 额外补充 4. Cox 比例风险模型4.1 lifelines 中的 Cox 模型…

Echarts中饼图-实现放大显示数据

示例 代码演示 option {tooltip: {trigger: item},legend: {top: 5%,left: center},series: [{name: Access From,type: pie,radius: [40%, 70%],avoidLabelOverlap: false,label: {show: false,position: center},emphasis: {scale: true,//是否开启高亮后扇区的放大效果。s…

跟着LearnOpenGL学习12--光照贴图

文章目录 一、前言二、漫反射贴图三、镜面光贴图3.1、采样镜面光贴图 一、前言 在跟着LearnOpenGL学习11–材质中,我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观&#xf…

若依common模块解读,Java小白入门(四)

● 若依springboot版本后端,有两个核心模块,一个是ruoyi-common,一个是ruoyi-framewok,今天我们来看第一个模块ruoyi-common, 一些基类,工具等框架底座,分别来看其包含哪些基本内容: 1. annotation 注解,…

Pikachu靶场 “Http Header”SQL注入

1. 先在 pikachu 打开 Http Header 注入模块,点击提示 查看登录 账号 和 密码,登陆后去 Burp 中找到登陆的 GET请求 2. 设置payload1 :在 User-Agent最后 输入 查看 数据库名 or updatexml(1,concat(0x7e,database()),0) or 查看 用户名…

windows搭建MySQL 8.25主从配置

1.本次搭建的版本 mysql-8.0.25-win-x64 2.在解压完成后的文件内并没有对应的my.ini的配置文件这个my.ini是需要的主配置文件需要自行创建。 注:安装路径及数据存放路径需根据实际安装情况进行修改(其它配置信息可结合实际情况进行修改) 3.在…

什么是迁移学习(Transfer Learning)?定义,优势,方法

迄今为止,大多数人工智能(AI)项目都是通过监督学习技术构建的。监督学习是一种从无到有构建机器学习(ML)模型的方法,它对推动AI发展起到了关键作用。然而,由于需要大量的数据集和强大的计算能力…

highcharts的甘特图设置滚动时表头固定,让其他内容跟随滚动

效果图:最左侧的分类列是跟随甘特图滚动的,因为这一列如果需要自定义,比如表格的话可能会存在行合并的情况,这个时候甘特图是没有办法做的,然后甘特图的表头又需要做滚动时固定,所以设置了甘特图滚动时&…

最新多模态大模型SOTA - EMU (Generative Multimodal Models are In-Context Learners)

前言 设计的模型叫EMU,通过统一的自回归方式(其预测的输出依赖于过去的输出)训练。参数37B(370亿)。指标在目前多项视觉(图像,视频)问答的SOTA tips: 不过这里吐槽一点…

如何搭建Tomcat服务并结合内网穿透实现公网访问本地站点

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器,不仅名字很有趣&#xff0…

SA 接通案例(2)

1.测试卡开通增值业务导致VONR呼叫时延增大 关键字:VONR拉网测试,VONR时延,增值业务 【问题描述】 3月VONR拉网测试呼叫时延增加,2月VONR呼叫时延1.1s,3月VONR呼叫时延1.4s。 【问题分析】 一、2月和3月典型Case对比…

CMMI-项目总体计划模版

目录 1、总体目录结构 2、重点章节概要示例 2.1 第四章 项目管理 2.2 第六章 实施与交付计划 2.3 第七章 运维计划 1、总体目录结构 2、重点章节概要示例 2.1 第四章 项目管理 2.2 第六章 实施与交付计划 2.3 第七章运维计划

最佳实践!Apipost使用指南

自诞生以来,Apipost凭借其简洁直观的用户界面、强大的功能以及简单、易上手的操作,让Apipost成为了开发人员不可或缺的工具。本文将详细介绍Apipost的主要功能和使用方法,帮助大家更好地了解这款优秀的API开发工具。 下载安装 直接进入Apip…

桃红葡萄酒是如何成为当代宠儿的?

在过去的几年里,桃红葡萄酒的质量和受欢迎程度都有了很大的提高。夏天是花园和烧烤聚会的旺季,玫瑰红是许多美食家最喜欢的颜色。桃红葡萄酒满足了味觉的各种需求,它们是三文鱼和烤鸡等各种美食的绝佳伴侣,是任何精致辛辣菜肴的真…

ARM串口通信编程实验

完成:从终端输入选项,完成点灯关灯,打开风扇关闭风扇等操作 #include "gpio.h" int main() {char a;//char buf[128];uart4_config();gpio_config();while(1){//接收一个字符数据a getchar();//发送接收的字符putchar(a);switch(…

MAVEN依赖生成后idea依然爆红问题

以下是对MAVEN依赖生成后idea依然爆红问题的一种猜测 ----- 碰到解决不了可以试一下(也请大佬们指正) 把所有后端服务停了(当微服务项目件存在依赖相互引用的情况时,在install时可能影响到新包的生成,因为存在包占用&…

4. 从零开始学Sqoop大数据框架,这些学习网站助你一臂之力!

介绍:Sqoop是一款开源的工具,主要用于在Hadoop与传统的数据库系统间进行数据的传递。它可以将一个关系型数据库(例如:MySQL、Oracle、Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关…