async-await

简介: 首先说明 async/await语法 属于ES7,不过到现在就算是es6也还算是新技术吧,技术迭代比较慢

1. 前言


首先说明  async/await语法 属于ES7,不过到现在就算是es6也还算是新技术吧,技术迭代比较慢


2. 是什么 what


1.async/await语法 通常结合promise使用

2.也就是说也是用同步的方式来写异步代码

3.async 是异步的意思 用来声明一个 function是异步的

4.await  是 async  wait 异步等待 ,就是等待一个异步函数执行完成

  1. 规定await只能出现在async函数中


3. async基础


3.1 demo


async function testAsy() {
            return "hello  asy"
        }
        const result = testAsy()
        console.log("result:",result);


3.2 结果

5FS$[OMA)D)I$RHJE5M5F[B.png



3.3 分析

  1. 打印的结果并不是 return的字符串
  2. 返回的是个promise,所以我们需要通过then来脱壳取值


3.4 取值


async function testAsy() {
            return "hello  asy"
        }
        testAsy().then(res=>{
            console.log("Res:",res);
        })
        console.log("result后面,但是先执行");


3.5结果

1C`C)B8P`[NG{6@7G@``~GC.png



3.6 分析

  1. async 修饰的函数 是异步函数
  2. async内部给函数包了一层Promise.resolve()


4.  reject实现


既然有resolve 那肯定也有 reject

4.1 代码


async function testAsy(flag) {
            if(flag){
                return "hello  asy"
            }else{
                throw '抛出异常'
            }
        }
        console.log(testAsy(true));//Promise.resolve()
console.log(testAsy(false));//Promise.reject()


4.2 结果

W%~@FXRI[O%@IL)F5LNB2[D.png



5. catch


5.1 代码


async function testAsy(flag) {
            if(flag){
                return "hello  asy"
            }else{
                throw '抛出异常'
            }
        }
        testAsy(false).then(res=>{
            console.log("Res:",res);
        }).catch(err=>{
            console.log("捕获错误:",err);
        })


5.2 结果

_L$D~DME{(99VBEOV$M7W@Y.png


还是通过 promise的 catch来进行错误捕获


6.  await catch


1.async wait 异步等待 ,等待什么呢

  1. 后面可以根任何表达式

6.1 代码


function testWait() {
            return new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    resolve("测试wait")
                },1000)
            })
        }
        async function test() {
          const r1 = await testAsy(true)
          console.log("结果 wait:",r1);
            const r2 = await testWait()
            console.log("结果 wait:",r2);
        }
        test()



6.2 分析

1.testWait()本身就是返回的promise,异步的,所以不需要加async

2.使用async/await语法对比

3.await放置在Promise调用之前,await强制等待后面代码执行,直到Promise对象resolve,得到resolve的值作为await表达式的运算结果

4.await只能在async函数内部使用,用在普通函数里就会报错


6.3 then处理

await直接脱掉了一层then的壳 比较方便


6.4 catch


function testWait() {
            return new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    resolve("测试wait")
                },1000)
            })
        }
        async function test() {
            const r1 = await testAsy(true)
            console.log("结果 wait:",r1);
            const r2 = await testWait()
            console.log("结果 wait:",r2);
          try{
            let res3 =   await testAsy(false)
            console.log("结果-3:",res3)
             } catch(error){
            console.log("-------",error)
           }
        }
        test()


其实就是结合 try{}catch{}来搞


7.react 使用



async  componentDidMount(){
     try{
        let res1 =   await  axios.get("/v1/use?type=1")
        console.log("结果:",res1)
     } catch(error){
        console.log("-------",error)
     }



8. vue3 使用



async created() {
  this.characters = (await getList()).data
}



9.  扩展下规范的几个阶段


1.编辑草案 Editor's Draft (ED)

2.工作草案 Working Draft (WD)

3.过渡-最后通告工作草案 Transition – Last Call Working Draft (LCWD)

4.候选推荐标准 Candidate Recommendation (CR)

5.过渡-建议推荐标准 Transition – Proposed 6.Recommendations (PR)

7.推荐标准 Recommendation (REC)




相关文章
|
算法 Unix API
指数退避(Exponential backoff)在网络请求中的应用
## 一、背景 最近做云服务 API 测试项目的过程中,发现某些时候会大批量调用 API,从而导致限流的报错。在遇到这种报错时,传统的重试策略是每隔一段时间重试一次。但由于是固定的时间重试一次,重试时又会有大量的请求在同一时刻涌入,会不断地造成限流。 这让我回想起两年前在查阅[Celery Task 文档](http://docs.celeryproject.org/en/latest
13435 1
|
SQL API 索引
Superset对接ElasticSearch服务展示
Superset对接ElasticSearch服务展示
913 2
Online Judge System 中术语含义: OJ、AC、WA、TLE、OLE、MLE、PE、RE、CE
Online Judge System 中术语含义: OJ、AC、WA、TLE、OLE、MLE、PE、RE、CE
4291 0
Online Judge System 中术语含义: OJ、AC、WA、TLE、OLE、MLE、PE、RE、CE
|
新零售 前端开发 JavaScript
盒马跨端设计系统 ReX Design For OS
6 个月前,在 D2 前端技术论上我们向社区分享了《盒马中后台跨端方案》,详细介绍了我们在基于盒马实体零售数字化业务场景中,面向盒马营运数字化系统构建的跨端设计系统——ReX Design For OS。6 个月来,在开发资源极度紧张的状态下,我们持续建设和打磨,今天我们很高兴的告诉大家我们已经将项目的主要代码开源到了 Github,并发布了 beta 版本。
盒马跨端设计系统 ReX Design For OS
|
安全 网络协议
最新可靠好用的DNS服务器地址汇总
如果修改DNS服务器地址就可以访问google等服务,你还等什么?使用免费DNS解析服务除了去掉了运营商的各种广告,还有个最大的好处就是不会重定向或者过滤用户所访问的地址,这样就防止了很多网站被电信、网通劫持,有利于提供访问一些国外网站的成功率 如googlecode,网友应该养成不使用默认DNS的习惯,笔者汇总了常用可靠的DNS服务器地址。
15897 0
|
机器学习/深度学习 人工智能 自然语言处理
Tokenformer:基于参数标记化的高效可扩展Transformer架构
本文是对发表于arXiv的论文 "TOKENFORMER: RETHINKING TRANSFORMER SCALING WITH TOKENIZED MODEL PARAMETERS" 的深入解读与扩展分析。主要探讨了一种革新性的Transformer架构设计方案,该方案通过参数标记化实现了模型的高效扩展和计算优化。
585 0
|
机器学习/深度学习 算法 机器人
使用Python实现深度学习模型:智能灾害响应与救援机器人
使用Python实现深度学习模型:智能灾害响应与救援机器人
252 16
|
算法 调度 Python
我将根据系统工程在交通运输领域的应用,给出一个简单的Python代码示例,用于模拟交通信号灯的控制,并对其进行详解。
我将根据系统工程在交通运输领域的应用,给出一个简单的Python代码示例,用于模拟交通信号灯的控制,并对其进行详解。
|
JSON 安全 Java
Star 28.2k!这个开源库真是好用
阅读Hutool的源码是深入理解其工作原理的有效方式。通过阅读源码,你可以学习到Hutool的实现细节,了解其内部的逻辑和设计模式。这对于提高自己的编程技能和理解Hutool的精髓非常有帮助。由于分析源码需要更大的文章篇幅,后续有时间,V 哥再单独写一篇文章来解释这些好用工具类的源码分析。
238 1
|
边缘计算 运维 5G
【专栏】IT 技术百科:5G 承载网是连接5G无线接入网与核心网的关键基础设施,负责高效、可靠的数据传输。
【4月更文挑战第28天】5G 承载网是连接5G无线接入网与核心网的关键基础设施,负责高效、可靠的数据传输。它保障通信质量,支持多样业务,并驱动技术创新。关键技术包括FlexE、网络切片、光传输和智能管控。面对高速率、低时延需求及网络复杂性挑战,5G承载网需持续创新并优化规划。未来,它将趋向智能化、融合发展及绿色节能。作为5G性能的核心,5G承载网将伴随5G技术的普及,持续为数字生活创造更多可能性。
574 0