ES6学习(五):async和await的使用

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,'报错回调')
        })

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“关爱长者 托起夕阳无限美好”清峰公益开展寒冬暖心慰问活动

2023年12月23日,陆丰市清峰公益服务中心在陆丰市潭西镇党群服务中心开展爱老敬老寒冬暖心慰问活动。此次活动是陆丰市清峰公益服务中心自11月中下旬“清峰公益 凝聚慈善力量 共创美好生活”项目启动仪式后开展的首次暖心慰问活动,活动还特意为老人们准备…

地图导航测试点总结

地图导航是我们经常使用的工具,能帮助我们指引前进的方向。 接下来,会从功能测试、UI测试、兼容测试、安全测试、网络测试、性能测试、易用性测试、文档和国际化语言测试8个方面来编写地图导航测试用例。 一、功能测试 1. 输入起点和终点,…

松柏之志,下聚百川-松下中国阿里云大数据实践

作者:南宫兰 松下信息系统(上海)有限公司 数据分析部部长 松下集团在中国及东北亚地区拥有有64家法人公司,员工人数约4万人,业务范围涉及研究开发,养老、铸件、汽车、车载、能源、电池等多个方面&#xff…

【MySQL】:超详细MySQL完整安装和配置教程

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. MySQL数据库1.1 版本1.2 下载1.3 安装1.4 客户端连接 🌤️全篇总…

YOLOv5 目标计数 | 图片上绘制计数结果

修改方法: 只需要改 detect.py for path, im, im0s, vid_cap, s in dataset: 下新增一行 class_counts = {} class_counts[int(c)] = class_counts.get(int(c

vs code 代码统计 插件 (webstorm统计代码)

https://blog.csdn.net/aikudexiaohai/article/details/129367503 安装插件 VS Code Counter使用快捷键 Ctrl Shift P,搜素“VSCodeCounter”,选择 Count lines in directory。 在文件路径搜索框中,补充待统计的目录,如&#x…

我在 VSCode 插件里接入了 ChatGPT,解决了Bug无法定位的难题

作为一名软件开发者,我时常面临着代码中Bug的定位和解决问题。这个过程往往既费时又充满挑战。然而,最近我在我的VSCode插件中接入了ChatGPT,这个决定彻底改变了我处理Bug的方式。 Bug:开发者的噩梦 在开发过程中,遇…

靠一首诗流芳后世的26位诗人

中国古代诗词史上的文人墨客众多,著名的诗词大家也不少,尤其是唐宋以来,可谓是人才辈出,从李白、杜甫到苏轼、辛弃疾,从李清照、朱淑贞到纳兰性德等。 当然,在浩瀚的诗词史上,哪个文人不想名传…

Vscode运行调试文件

文章目录 vscode调试运行流程vscode 执行报错settings.json成功截图 vscode调试运行流程 vscode左侧菜单栏点击运行调试icon,点击菜单右侧栏运行和调试按钮,选择node调试器,js文件行数左边点击添加红色断点,运行当前文件 vscode…

Python-Mac格式转换脚本

一、原因: 将c4:ef:da:12:5c:53 变为 c4ef-da12-5c53 二、代码 import remac_addresses []# Read the file with open(client_list.txt, r) as file:# Read file contents into a listmac_addresses [line.strip() for line in file]# Process and print MAC add…

QA 团队基于 DataLeap 开放平台能力的数据测试实践

背景 &痛点 随着生态体系扩展和业务发展,数据在业务中承担的决策场景越来越多样化,一部分数据已应用在资损、高客诉等高风险场景,因此对数据质量的要求,尤其是高风险场景的质量要求非常之高。但在保障过程中往往面临以下痛点…

基于MPU6050的跌倒检测项目设计

一、背景 随着人口老龄化的不断加剧,老年人的健康和安全问题备受关注。本设计旨在利用STM32单片机与MPU6050传感器相结合,实现基于角度变化的跌倒检测系统。这一系统不仅能够快速、准确地检测老年人是否发生跌倒,还通过整合通信模块实现了实…

Non-Contrastive Unsupervised Learning of Physiological Signals from Video

研究背景 基于相机的生命体评估是一个快速增长的领域,可以在各种设置中进行非接触式健康监测。虽然许多信号避免了人眼的检测,但可见光和红外范围内的视频数据包含由血量和呼吸等生理逻辑振荡引起的微妙强度变化。用于估计心脏脉搏的远程光电容积术&…

外汇天眼:最新监管警告名单更新,远离以下无牌黑户!

监管信息早知道!外汇天眼将每周定期公布监管牌照状态发生变化的交易商,以供投资者参考,规避投资风险。如果平台天眼评分过高,建议投资者谨慎选择,因为在外汇天眼评分高不代表平台没问题! 以下是监管牌照发生…

到底是前端验证还是后端验证

背景 软件应用研发中, 前端验证还是后端验证这是意识与认知问题。鉴于某些入门同学还不清楚,我们再来看下: 一. 从软件行业来自国外 Q: 前端验证和后端验证都是对同一个数据的验证,有什么区别? A: 二者的目的不同&…

【网络安全】Log4j 远程代码执行漏洞解析

一、简介 Log4j2 是一个用于 Java 应用程序的成熟且功能强大的日志记录框架。 它是 Log4j 的升级版本,相比于 Log4j,Log4j2 在性能、可靠性和灵活性方面都有显著的改进。 二、特点 Log4j2 是一个功能强大且灵活的日志记录框架,旨在提供高…

基于深度学习的安全帽检测识别系统(含UI界面,yolov8、Python代码,数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov8 yolov8主要包含以下几种创新:         1. 添加注意力机制(SE、CBAM等)         2. 修改可变形卷积(DySnake-主干c…

猫头虎分享2023年12月17日博客之星候选--城市赛道博主文章数据

猫头虎分享2023年12月17日博客之星候选–城市赛道博主文章数据 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开…

一文搞懂设计模式之建造者模式

大家好,我是晴天,我们又见面了,这周我们继续学习一文搞懂设计模式系列,本周将一起学习建造者模式(生成器模式) 什么是建造者模式 建造者模式(也称为生成器模式)是一种创建型设计模式…

ov多域名证书可以保护几个域名

互联网上的站点大多遵循http明文传输协议传输数据,因此,网站在传输一些私人信息时很容易被劫持、篡改,在互联网日益普及的今天,信息安全显得尤为重要。SSL数字证书就是开发者用来保护网站信息安全的工具之一,它会为htt…