前言

async functionsawait 关键字是最近添加到JavaScript语言里面的。它们是ECMAScript 2017 JavaScript版的一部分。简单来说,它们是基于promises的语法糖,使异步代码更易于编写和阅读。通过使用它们,异步代码看起来更像是老式同步代码,因此它们非常值得学习。

async/await 基础

在代码中使用 async / await 有两个部分。

1. async 关键字

首先,我们使用 async 关键字,把它放在函数声明之前,使其成为 async function。异步函数是一个知道怎样使用 await 关键字调用异步代码的函数。

尝试在浏览器的JS控制台中键入以下行:

function hello() { return "Hello" };
hello();


该函数返回“Hello” —— 没什么特别的,对吧?

如果我们将其变成异步函数呢?请尝试以下方法:

async function hello() { return "Hello" };
hello();


哈。现在调用该函数会返回一个 promise。这是异步函数的特征之一 —— 它保证函数的返回值为 promise。

你也可以创建一个异步函数表达式 async function expression,如下所示:

let hello = async function() { return "Hello" };
hello();

你可以使用箭头函数:

let hello = async () => { return "Hello" };

这些都基本上是一样的。

要实际使用promise完成时返回的值,我们可以使用.then()块,因为它返回的是 promise

hello().then((value) => console.log(value))

甚至只是简写如

hello().then(console.log)

async 关键字加到函数申明中,可以告诉它们返回的是 promise,而不是直接返回值。此外,它避免了同步函数为支持使用 await 带来的任何潜在开销。在函数声明为 async 时,JavaScript引擎会添加必要的处理,以优化你的程序。爽!

2. await 关键字

  • await 关键字与异步函数一起使用时,它的真正优势就变得明显了 —— 事实上, await 只在异步函数里面才起作用

  • await 关键字可以放在任何异步的,基于 promise 的函数之前。它会暂停代码在该行上,直到 promise 完成,然后返回结果值。在暂停的同时,其他正在等待执行的代码就有机会执行了。

  • 你可以在调用任何返回Promise的函数时使用 await,包括Web API函数。

下面一个简单的示例

JS 异步编程终极解决方案 async/await 的使用手册相关推荐

  1. 【JS】1015- 异步编程的终极解决方案 async/await

    早期的回调函数 回调函数我们经常有写到,比如: ajax(url, (res) => {console.log(res); }) 复制代码 但是这种回调函数有一个大缺陷,就是会写出 回调地狱(C ...

  2. JS异步编程的解决方案

    js解决异步编程有6种方案: 1.1 回调函数 异步编程的最基本方法,把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数. 优点:简单.容易理解和实现. 缺点:多次调用 ...

  3. JS 异步编程的解决方案,以及回调地狱的解决方案

    1.回调函数 回调函数是异步编程最基本的方法. 所谓回调函数,就是把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,再调用这个函数. fs.readFile('/etc/fstab', ...

  4. JS 异步编程的 5 种解决方案

    我们知道 JS 语言的执行环境是"单线程",所谓"单线程",就是指一次只能完成一件任务,这种模式的好处是实现起来比较简单,执行环境相对单纯:坏处是只要有一个任务 ...

  5. 避免回调地狱的解决方案 async/await:用同步的方式去写异步代码

    文章目录 前言 一.引入异步编程 二.常见处理异步编程的几种方式 1.Generator函数 2.Promise函数 3.async/await 总结 前言 这篇文章主要给大家分享一下,自己关于异步编 ...

  6. 57 Node.js异步编程

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.Node.js异步编程 1.1 Node.js中的异步API 如果异步API后面的代码 ...

  7. JS 异步编程及常考面试题

    JS 异步编程及常考面试题 并发(concurrency)和并行(parallelism)区别 涉及面试题:并发与并行的区别? 异步和这小节的知识点其实并不是一个概念,但是这两个名词确实是很多人都常会 ...

  8. Node.js异步编程~超级详细哦

    下面是对Node.js异步编程的整理,希望可以帮助到有需要的小伙伴~ 文章目录 同步API,异步API 同步API,异步API的区别 获取返回值的方式不同 代码执行顺序不同 Node.js中的异步AP ...

  9. JS 异步编程六种方案

    前言 我们知道Javascript语言的执行环境是"单线程".也就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务. 这种模式虽然实现起来 ...

最新文章

  1. Gym 101845(2018 ACM-ICPC, Universidad Nacional de Colombia Programming Contest)
  2. 一篇文章教会你利用Python网络爬虫获取Mikan动漫资源
  3. Spring3.2.8+Mybatis3.2.6 多数据源基于BaseDAO的配置
  4. hadoop+spark生态系统操作与指南非影印版_Spark背景知识学习
  5. [BZOJ 2588]Count on a tree
  6. Hadoop常见错误解析
  7. mongodb常用操作语句
  8. Spring-core-AnnotationAttributes
  9. 关于Tortoise git汉化包装了,不管用,仍然是英文菜单的问题记录
  10. day21-2 类的派生
  11. Hibernate HQL基础
  12. 戒烟、写作、赚美金:我的2020【CSDN年度征文】
  13. 如何用python做无限弹窗_Python无限弹窗,开机启动,打包为exe程序
  14. 你知道如何从零开始学c++游戏编程吗
  15. Redis持久化——AOF机制详解
  16. 一种化学荧光探针945928-17-6,TAMRA alkyne,5-isomer,四甲基罗丹明-炔基
  17. 2019年中国经济四大看点
  18. 苹果开发者账号管理后台developer.apple.com,不同身份的具体权限
  19. 疫情之下,零售企业不该只是为了 “ 活 ” !
  20. 用Vue开发小程序的框架

热门文章

  1. python爬虫框架论文开题报告怎么写_论文开题报告范例
  2. 第二树参与COP27可持续消费主题边会,探讨低碳办公解决方案
  3. html表格如何做成响应式,响应式web中的表格处理
  4. java:stringbuffer的常用方法
  5. Python-Django毕业设计白酒营销管理(程序+Lw)
  6. CSS3的选择器常用汇总
  7. 怎么取消苹果手机自动续费_请教大神们…苹果ID如何取消爱奇艺的自动续费?...
  8. bzoj2393 Cirno的完美算数教室
  9. COALESCE函数
  10. “不将就”!一加手机真机评测