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相继执行官方案例和图解
结果:
在这里插入图片描述


async+await同时(concurrent)执行官方案例和图解
async+await同时(concurrent)执行官方案例和图解
结果:
在这里插入图片描述
async+await同时执行官方案例和图解2:concurrentPromise
async+await同时执行官方案例和图解2:concurrentPromise
结果:
结果


async+await平行(parallel)执行官方案例和图解
async+await平行(parallel)执行官方案例和图解
结果
在这里插入图片描述
async+await平行执行官方案例和图解2:parallelPromise
async+await平行执行官方案例和图解2:parallelPromise

上一篇:Web前端工作学习常用网站
下一篇:Promise的底层详解、应用及扩展

发表评论

最新留言

很好
[***.229.124.182]2025年04月08日 17时08分34秒