原创

async 函数

async 函数

含义

async 函数是什么?一句话,它就是 Generator 函数的语法糖

一比较就会发现,async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已

Generator 函数的执行必须靠执行器,所以才有了co模块,而async函数自带执行器

async和await,比起星号和yield,语义更清楚了

co模块约定,yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是 Promise 对象和原始类型的值

async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了

基本用法

async函数返回一个 Promise 对象,可以使用then方法添加回调函数

由于async函数返回的是 Promise 对象,可以作为await命令的参数

语法

async函数的语法规则总体上比较简单,难点是错误处理机制。

async函数返回一个 Promise 对象。

async函数内部return语句返回的值,会成为then方法回调函数的参数

async函数返回的 Promise 对象,必须等到内部所有await命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到return语句或者抛出错误

正常情况下,await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise 对象

如果await后面的异步操作出错,那么等同于async函数返回的 Promise 对象被reject

如果有多个await命令,可以统一放在try...catch结构中

async 函数的实现原理

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • async函数

    Generator函数的执行必须靠执行器,所以才有co模块,而async函数自带执行器。

    用户3258338
  • ES6之async函数

    Async函数是ES2017引入的,这一引入使得异步操作又更加方便了。其实async函数是generator的语法糖。只是把*号变成async,yield变成a...

    wade
  • nodejs记录1——async函数

    其实手动配置babel环境并不难,记录下步骤: 1、首先npm init创建一个nodejs项目 2、全局安装babel-cli处理工具:npm i babel...

    用户1141560
  • async 函数的含义和用法

    本文是《深入掌握 ECMAScript 6 异步编程》系列文章的最后一篇。 Generator函数的含义与用法 Thunk函数的含义与用法 co函数库的含义...

    ruanyf
  • await 只在 async 函数中工作

    关于 promise 的一种更优雅的写法 async/await 中,await 只会出现在 async 函数中,我们使用 async/await 时,几乎不需...

    前端开发博客
  • 「译」更快的 async 函数和 promises

    JavaScript 的异步过程一直被认为是不够快的,更糟糕的是,在 NodeJS 等实时性要求高的场景下调试堪比噩梦。不过,这一切正在改变,这篇文章会详细解释...

    coder_koala
  • 如何更好的编写async函数

    贾顺名
  • 如何更好的编写async函数

    Promise是使用async/await的基础,所以你一定要先了解Promise是做什么的 Promise是帮助解决回调地狱的一个好东西,能够让异步流程变得更...

    贾顺名
  • ES6 async-await函数记录

    杭州前端工程师
  • 嘿,不要给 async 函数写那么多 try/catch 了(偏原理)

    在开发中,你是否会为了系统健壮性,亦或者是为了捕获异步的错误,而频繁的在 async 函数中写 try/catch 的逻辑?

    coder_koala
  • 嘿,不要给 async 函数写那么多 try/catch来捕获异常

    在开发中,你是否会为了系统健壮性,亦或者是为了捕获异步的错误,而频繁的在 async 函数中写 try/catch 的逻辑?

    IT大咖说
  • 《深入浅出Node.js》:Node异步编程解决方案 之 async函数

    关于async函数,需要明确它是generator函数的语法糖,即将生成器函数的*换成async关键字,将yield关键字换成await关键字。使用async函...

    前端_AWhile
  • 异步函数async和await

    前面我们介绍的是promise对象,这里我们介绍一下async...await异步函数,创建函数时候使用async关键词表示这是一个异步函数,await必须和a...

    十月梦想
  • 面试官问 async、await 函数原理是在问什么?

    这周看的是 co 的源码,我对 co 比较陌生,没有了解和使用过。因此在看源码之前,我希望能大概了解 co 是什么,解决了什么问题。

    若川
  • JavaScript: 结合 async 异步函数 - 提高 Promise 的易用性

    西南_张家辉
  • 异步函数async await在wpf都做了什么?

    首先我们知道async await 异步函数本质是状态机,我们通过反编译工具dnspy,看看反编译的两段代码是否有不同之处:

    ryzenWzd
  • ES2017 异步函数的最佳实践(`async` /`await`)

    简单来说,async函数是 promise 的 "语法糖"。它们允许我们使用更熟悉的语法来模拟同步执行,从而代替 promise 链式写法。

    秋风的笔记
  • react-开发经验分享-async与生命周期函数

    Mr. 柳上原
  • 不使用回调函数的ajax请求实现(async和await简化回调函数嵌套)

    在常规的服务器端程序设计中, 比如说爬虫程序, 发送http请求的过程会使整个执行过程阻塞,直到http请求响应完成代码才会继续执行, 以php为例子 ? 当...

    用户1608022

作者介绍

精选专题

活动推荐

扫码关注云+社区

领取腾讯云代金券