asyne和await
async await
async
- ES7 提出的async 函数,终于让 JavaScript 对于异步操作有了终极解决方案
async 本身是一个语法糖
语法糖: 带有一定功能的关键字.
async 写在函数的前面,那么该函数叫做 async 函数。用于表示函数是一个异步函数,且该函数的执行不会阻塞后面代码的执行。
作用:为了解决大量复杂不易读的Promise异步的问题。
功能: 创建并返回一个 promise 实例,在函数内部使用 await 来表示异步。
这个功能引出问题:async 函数中 return 值去哪儿了?如何接受?
Q1:async 函数中 return 值去哪儿了?如何接受?
- async 函数中的 return 值,在 async 函数返回的promise 实例内,具体的是
preomise.[[PromiseValue]]
的值
- async 函数中的 return 值,在 async 函数返回的promise 实例内,具体的是
// 因为在 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相关推荐
- setTimeout、setInterval、promise、async/await的顺序详解(多种情况,非常详细~)
本文很长,列举的情况很多. 在阅读本文之前,如果您有充足的时间,请新建一个项目与本文一同实践. 每段代码都有对应的解释,但是自己动手尝试印象才会更深哦~ setInterval:表示多久执行一次,需要 ...
- 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 ...
- await使用中的阻塞和并发(一)
好吧,不加点陈述不让发首页.那我们来陈述一下本篇提到的问题和对应的方法. 在.NET4.5中,我们可以配合使用async和await两个关键字,来以写同步代码的方式,实现异步的操作. 好处我目前看来有 ...
- C# async await 学习笔记2
C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html) 提到了ThreadId是一样的,突然想到在WinForm中,非UI线程 ...
- promise 和 async await区别
什么是Async/Await? async/await是写异步代码的新方式,以前的方法有回调函数和Promise. async/await是基于Promise实现的,它不能用于普通的回调函数. as ...
- 快速学习 async await 的使用, Demo 解析
async 和 await 字面都很好理解,分别是异步和等待. 来两个简单的 demo, demo1 tt2(){return new Promise(rps=>{setTimeout(() = ...
- angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )
Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...
- python async await报错_Python 3.7.7 发布 支持async并await现在为保留关键字
Python 3.7.7 发布了,这是一个 bug 修复版本.2020 年中之前将持续更新 3.7 系列的 bug 修复版本,并直到 2023 年中之前持续提供安全修复版本. 目前 3.8 已经是最新 ...
- async await:比requests 更强大
最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用"异步"协程的方式实现.看着满屏幕经过 async await(协程在 Python 中的实现)修饰的代码,我 ...
最新文章
- Java项目:精美网上音乐平台(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
- PowerShell2.0之桌面计算机维护(八)关闭或重启远程计算机
- 基于 Docker 和 GitLab 的前端自动化部署实践笔记
- 一次难得的分库分表实践
- PowerDesigner概念模型详解
- 微服务难点剖析 | 服务拆的挺爽,问题是日志该怎么串联起来呢?
- Android基础教程(六)之------- 参数的传递(Bundle)
- Java 数组与容器之间的转化 实现数组动态赋值
- Activityn 生命周期
- Android保存照片到相册
- YOLO v3源码详解
- 黄太吉如何把煎饼卖到4000万估值
- think.php教程,Thinkphp_thinkphp教程_自学php网
- PS基础教程[6]如何快速制作一寸照片
- 激活pytorch环境
- 17. 尚融宝引入阿里云短信服务
- TMT/MOBIE成像光谱仪的概念设计阶段杂散光分析
- authorizationPolicy详解
- QGIS基本功|5 QGIS图层进阶(二)- 连接属性表
- VMware中使用U盘PE系统
热门文章
- java商城项目开发背景描述_javaweb凌翊商城项目展示概述.ppt
- shell if 未找到命令
- 新概念c语言能力教程答案,新概念c语言能力教程
- Prometheus和它的xdm
- 使用librtmp库进行推流与拉流
- 由FlexBox算法强力驱动的Weex布局引擎
- Spark抽取MySQL分表优化
- 埃森哲 java_【埃森哲JAVA软件工程师面试】要求挺高,从面试到拿到offer历经时间长-看准网...
- NLP从入门到实战(三)
- 【推荐】mysql联合 索引(复合索引)的探讨