async await

async

  • ES7 提出的async 函数,终于让 JavaScript 对于异步操作有了终极解决方案

async 本身是一个语法糖
语法糖: 带有一定功能的关键字.

  • async 写在函数的前面,那么该函数叫做 async 函数。用于表示函数是一个异步函数,且该函数的执行不会阻塞后面代码的执行。

    • 作用:为了解决大量复杂不易读的Promise异步的问题。

    • 功能: 创建并返回一个 promise 实例,在函数内部使用 await 来表示异步。

    • 这个功能引出问题:async 函数中 return 值去哪儿了?如何接受?

  • Q1:async 函数中 return 值去哪儿了?如何接受?

    • async 函数中的 return 值,在 async 函数返回的promise 实例内,具体的是 preomise.[[PromiseValue]] 的值
// 因为在 foo 函数之前添加了 async 关键字,所以此时 foo 函数变成了 async 函数
async function foo (p){console.log('foo run',p);   // foo run 1return 1
}// res 用来接收 foo 函数的返回值
var res = foo(1);console.log(res);   // Promise { <state>: "fulfilled", <value>: 1 }

执行结果

foo run 1
Promise { <state>: "fulfilled", <value>: 1 }
  • Q2:async 函数中 return 值如何接收?

    • async 函数中的 return 值,可以通过 promise.then-callback 形参获取
console.log(1111);async function foo(){console.log(2222222222222);return 123}// res 是一个 promise 实例
let res = foo();console.log(333333333333333);// 通过 promise.then-callback 形参获取
// 即 async 函数的 return 值 成为 promise.then 方法中 callback 的形参
res.then(data=>{console.log(data);})

执行结果

1111
2222222222222
Promise { <state>: "fulfilled", <value>: 123 }
333333333333333
123

await

  • await 是等待,需注意

    • 1、await 需要在async中写;
    • 2、await 右侧跟的是 promise 实例;
    • 3、await 作用 获取 promise.[[PromiseValue]] 的值
    • 4、作用:为了解决大量复杂不易读的Promise异步的问题。

async 和 await 的相关知识点

计划会修改

  • 1、async 作为一个关键字放到函数的前面,用于表示函数是一个异步函数,该函数的执行不会阻塞后面代码的执行。
  • 2、async 声明的函数的返回本质上是一个 Promise,async 函数内部会返回一个Promise对象,then 方法回调函数的参数。
  • 3、await的本质是可以提供等同于同步效果的等待异步返回能力的语法糖,用await声明的Promise异步返回,必须“等待”到有返回值的时候,代码才继续执行下去。
  • 4、async 函数内部的实现原理是 resolved,如果函数内部抛出错误, 则会导致返回的 Promise 对象状态变为 reject 状态,promise 对象有一个catch 方法进行捕获,被 catch 方法回调函数接收到。
  • 5、async 必须声明的是一个 function,await 就必须是在这个 async 声明的函数内部使用,必须是直系,作用域链不能隔代,在后面放一个返回 promise 对象的表达式。
  • 6、函数的错误处理,当 async 函数中只要一个 await 出现 reject 状态,则后面的 await 都不会被执行,可以添加 try/catch。

asyne和await相关推荐

  1. setTimeout、setInterval、promise、async/await的顺序详解(多种情况,非常详细~)

    本文很长,列举的情况很多. 在阅读本文之前,如果您有充足的时间,请新建一个项目与本文一同实践. 每段代码都有对应的解释,但是自己动手尝试印象才会更深哦~ setInterval:表示多久执行一次,需要 ...

  2. Await, and UI, and deadlocks! Oh my!

    It's been awesome seeing the level of interest developers have had for the Async CTP and how much us ...

  3. await使用中的阻塞和并发(一)

    好吧,不加点陈述不让发首页.那我们来陈述一下本篇提到的问题和对应的方法. 在.NET4.5中,我们可以配合使用async和await两个关键字,来以写同步代码的方式,实现异步的操作. 好处我目前看来有 ...

  4. C# async await 学习笔记2

    C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html) 提到了ThreadId是一样的,突然想到在WinForm中,非UI线程 ...

  5. promise 和 async await区别

     什么是Async/Await? async/await是写异步代码的新方式,以前的方法有回调函数和Promise. async/await是基于Promise实现的,它不能用于普通的回调函数. as ...

  6. 快速学习 async await 的使用, Demo 解析

    async 和 await 字面都很好理解,分别是异步和等待. 来两个简单的 demo, demo1 tt2(){return new Promise(rps=>{setTimeout(() = ...

  7. angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )

    Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...

  8. python async await报错_Python 3.7.7 发布 支持async并await现在为保留关键字

    Python 3.7.7 发布了,这是一个 bug 修复版本.2020 年中之前将持续更新 3.7 系列的 bug 修复版本,并直到 2023 年中之前持续提供安全修复版本. 目前 3.8 已经是最新 ...

  9. async await:比requests 更强大

    最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用"异步"协程的方式实现.看着满屏幕经过 async await(协程在 Python 中的实现)修饰的代码,我 ...

最新文章

  1. Java项目:精美网上音乐平台(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
  2. PowerShell2.0之桌面计算机维护(八)关闭或重启远程计算机
  3. 基于 Docker 和 GitLab 的前端自动化部署实践笔记
  4. 一次难得的分库分表实践
  5. PowerDesigner概念模型详解
  6. 微服务难点剖析 | 服务拆的挺爽,问题是日志该怎么串联起来呢?
  7. Android基础教程(六)之------- 参数的传递(Bundle)
  8. Java 数组与容器之间的转化 实现数组动态赋值
  9. Activityn 生命周期
  10. Android保存照片到相册
  11. YOLO v3源码详解
  12. 黄太吉如何把煎饼卖到4000万估值
  13. think.php教程,Thinkphp_thinkphp教程_自学php网
  14. PS基础教程[6]如何快速制作一寸照片
  15. 激活pytorch环境
  16. 17. 尚融宝引入阿里云短信服务
  17. TMT/MOBIE成像光谱仪的概念设计阶段杂散光分析
  18. authorizationPolicy详解
  19. QGIS基本功|5 QGIS图层进阶(二)- 连接属性表
  20. VMware中使用U盘PE系统

热门文章

  1. java商城项目开发背景描述_javaweb凌翊商城项目展示概述.ppt
  2. shell if 未找到命令
  3. 新概念c语言能力教程答案,新概念c语言能力教程
  4. Prometheus和它的xdm
  5. 使用librtmp库进行推流与拉流
  6. 由FlexBox算法强力驱动的Weex布局引擎
  7. Spark抽取MySQL分表优化
  8. 埃森哲 java_【埃森哲JAVA软件工程师面试】要求挺高,从面试到拿到offer历经时间长-看准网...
  9. NLP从入门到实战(三)
  10. 【推荐】mysql联合 索引(复合索引)的探讨