
ES7新增语法糖async+await
发布日期:2021-05-04 20:18:25
浏览次数:20
分类:原创文章
本文共 1360 字,大约阅读时间需要 4 分钟。
async + await
学习参考MDN文章:。
async函数:是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise。async函数还可以被作为表达式来定义。
语法
async function name([param[, param[, ... param]]]) { statements }
参数
- name:函数名称。
- param:要传递给函数的参数的名称。
- statements:包含函数主体的表达式。可以使用await机制。
返回值:
- 首先返回的一定是一个promise实例,如果一个 async 函数的返回值看起来不是 promise ,那么它将会被隐式地包装在一个 promise 中
- 自己返回一个promise实例,则以自己返回的promise实例的成功或失败为主
- 函数内部执行报错,则返回失败的promise实例,如果内部做了异常捕获,返回状态依旧是成功态
描述:
- async + await 是 generator + promise 的语法糖,await 是异步微任务
- async 是函数修饰符,控制函数返回 promise 实例
- 使用 async 的主要目的:就是为了在函数内部使用 await
- await 表达式会暂停整个 async 函数的执行进程并出让其控制权【即函数体中遇到 await,其后面的代码正常执行,但是 await 下一步的代码会被暂停,并把它们当做一个任务,放置到 eventQueue 的微任务队列中】
- 只有当其等待的基于 promise 的异步操作被兑现或被拒绝之后才会恢复进程,promise 的解决值会被当作该 await 表达式的返回值
- 只有等待 await 后面的 promise 实例是成功态之后,才会把之前暂停的代码继续执行,
- 如果后面的 promise 实例是失败的或者报错,则下面的代码就不再执行了。
- 使用 async + await 关键字就可以在异步代码中使用普通的 try + catch 代码块
- async 函数的函数体可以被看作是由0个或者多个await表达式分割开来的。从第一行代码直到(并包括)第一个 await 表达式(如果有的话)都是同步运行的。这样的话:
- 一个不含await表达式的async函数是会同步运行的。
- 如果函数体内有至少一个await表达式,async函数就一定会异步执行。
- 在 await 表达式之后的代码可以被认为是存在在链式调用的 then 回调中,多个 await 表达式都将加入链式调用的then回调中,返回值将作为最后一个 then 回调的返回值。
async+await相继(sequential)执行官方案例和图解
结果:
async+await同时(concurrent)执行官方案例和图解
结果:
async+await同时执行官方案例和图解2:concurrentPromise
结果:
async+await平行(parallel)执行官方案例和图解
结果
async+await平行执行官方案例和图解2:parallelPromise
发表评论
最新留言
很好
[***.229.124.182]2025年04月08日 17时08分34秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
在vue项目中使用qrcodesjs2生成二维码
2019-03-04
在vue中实现中国地图
2019-03-04
JVM学习————运行时数据区(三)
2019-03-04
一、硬件防火墙
2019-03-04
MySQL 安装报找不到MSVCR120.dll错误
2019-03-04
Javaweb jQuery功能练习
2019-03-04
余生,愿你能靠近那些正能量的人——
2019-03-04
初学QT
2019-03-04
MATLAB在线编辑网站及使用教程
2019-03-04
IOC容器_Bean管理xml方式
2019-03-04
python+Aritest自动化—02—app_util.py—app驱动
2019-03-04
Typora的基础用法
2019-03-04
蓝桥杯入门练习题斐波那契数列
2019-03-04
Linux-find
2019-03-04
动态规划-矩阵连乘
2019-03-04
匿名内部类
2019-03-04
后台守护线程
2019-03-04
volatile关键字
2019-03-04
(JAVA常用类库)CharSequence接口
2019-03-04
(Java基础类库 )System类
2019-03-04