ES6中async函数

news/2024/11/20 6:59:59/

 1.async函数

说明: 

  1. 通常就是Generator函数的语法糖,async函数自带执行器,也就是说,async函数的执行,与普通函数使用一样。
  2. 语义化,加上async函数表示时异步操作,await表示需要等待结果。
  3. 通用性,async函数的await命令后面,可以是Promise对象和原始类型的值。
  4. 返回值时Promise,async函数的返回值是Promise对象。

2.用法

  async function fun(name){// 获取用户的名字const userName=fun1(name)//获取密码const passWord=fun2(password)return userName}fun("good").then(result=>{console.log(result);}) 

注意:上面是一个获取用户名的函数,函数前的async关键字,表示该内部有个异步操作。当用该函数的时候会返回一个promise对象。

2.1例子

   async function timeout(time){await new Promise(resolve=>{setTimeout(() => {resolve()}, time);}) }async function asyncOutput(value,time){await timeout(time)await console.log(value);}asyncOutput("hello world",2000)

注意:当两秒过后,输出hello world。

3.语法

说明:async函数的语法规则总体简单,但是难以发现错误。 返回Promise对象,async函数内部return语句返回的值,会成为then方法回到函数的参数。

  async function fun1(){return 'study repeatly'};fun1().then(result=>{console.log(result); //study repeatly})async function fun2(){throw new Error("出错了")}fun2().then(result=>{console.log(result);}).catch(error=>{console.log(error); //出错了})

注意:总结:函数内部return命令返回的值,会被then方法回调函数收到,async函数内部抛出错误,会导致返回的Promise对象变成reject状态。错误将会被catch方法回调函数接收到。

4. Promise对象的状态变化

说明:async函数返回的Promise对象,必须等到内部所有await命令后面的Promise对象执行后,才会发生改变,除非遇到return语句或者抛出错误。只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数。

5.await命令

说明:正常情况下,await命令后面是一个Promise对象,返回该对象的结果。如果不是就直接返回对应的值。

 async function fun3(){return await 132  //等同于return 132}fun3().then(result=>{console.log(result);  //132})

5.1例子

说明:任何一个await语句后面的Promise对象变成了reject状态,那么整个async函数都会中断执行。 

 async function fun4(){await Promise.reject("发生错误")await 123}fun4().then(result=>{console.log(result); //发生错误})

 5.2例子

说明:如果前一个异步操作失败,也不要中断后面的异步操作。

 async function fun5(){try {await Promise.reject("发生错误")} catch (error) {console.log(error);}return await Promise.resolve("successful") //控制权交还给异步函数}fun5().then(resolve=>{console.log(resolve); //successful}).catch(error=>{console.log(error);})

5.3例子

说明: await命令后面的Promise对象,运行结果可能是rejected(会抛出一个错误),所以最好把await命令放在try...catch代码块中。

 async function fun6(){try{await getfun();}catch(error){console.log(error);}}// 第二种写法async function fun7(){await getfun1().catch(error=>{console.log(error);})}

6.async函数实现原理

说明: async函数的实现原理,就是将Generator函数和自动执行器,包装在一个函数里面。

7.应用

说明:async实现部署了一系列动画,动画前一个结束才可以开始后一个动画,如果有一个动画出错,就不再往下执行,返回上一个成功执行的动画的返回值。

   async function continueAnimations(element,animations){let ret=nulltry{for(let action of animations){ret=await anim(action)}}catch(error){console.log(error);}return ret}

8.顶层await

说明:await命令可以在模块的顶层使用await命令。

 const data=await fetch("url")

注意:主要目的是使用await解决模块异步加载的问题。


http://www.ppmy.cn/news/75727.html

相关文章

python+django网上书籍商城小说在线阅读分享下载系统k19is-vue

为了解决用户便捷地在网上购物以及下载文件,本文设计和开发了一个网页小说阅读系统。本系统是基于 B/S架构设计,Dango框架 ,Python技术的前台页面设计与实现,使用Mysql数据库管理来完成系统的相关功能。主要实现了管理员与用户的注…

Flutter3.10版本发布,编程语言的重大更新

Flutter是一款强大的跨端开发框架,可以帮助开发者构建高性能、美观、灵活的应用程序,从而实现跨平台开发和部署。小程序容器技术与跨端框架结合使用,为开发者提供一站式的小程序开发和发布服务,帮助他们更加轻松和高效地构建和部署…

40亿个QQ号,限制1G内存,如何去重?

40亿个QQ号,限制1G内存,如何去重? 40亿个unsigned int,如果直接用内存存储的话,需要: 4*4000000000 /1024/1024/1024 14.9G ,考虑到其中有一些重复的话,那1G的空间也基本上是不够…

Java自定义类:打造属于自己的编程世界

🧑‍💻CSDN主页:夏志121的主页 📋专栏地址:Java核心技术专栏 目录 一、自定义类示例 二、隐式参数与显式参数 三、封装的优点 自定义类是Java中最基本、也是最重要的组成部分之一,使用者可以根据需求创建…

PCIe 载板设计资料原理图:382-基于FMC+的XCVU3P高性能 PCIe 载板

基于FMC的XCVU3P高性能 PCIe 载板 一、板卡概述 板卡主控芯片采用Xilinx UltraScale16 nm VU3P芯片(XCVU3P-2FFVC1517I)。板载 2 组 64bit 的DDR4 SDRAM,支持 IOX16或者 JTAG 口,支持PCIe X 16 ReV3.0以及 FMC 扩展接口。…

电动力学专题:天线指标

天线指标 谐振回路 天线是一个谐振回路 方向性 天线向一定方向辐射电磁波的能力。天线对不同方向传来的电波所具有的接收能力天线的水平方向图 一副天线在水平方向360度范围内的接受或发射能力的极坐标表示瓣:(类似瓣的结构)薄瓣宽度&…

C++的运算符与表达式

C的运算符与表达式 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C内置了丰富的运算符,并且提供了以下类型的运算符: 算数运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 表达式 在程序中,运算符是用来操作…

Object源码

介绍 Object对象是所有对象(包括数组)的超级父类,如果将对象比作一个人的话,Object对象就是所有人的唯一的祖先。所有的类的父类都是Object的直接子类或间接子类。如果一个类没有声明它的父类,那么他的父类默认为Object对象。 常用方法 re…