async/await方法解析
欲了解await,必须先了解Promise,可参考: http://www.cnblogs.com/yanze/p/6347646.html
支持度: ES6已支持Promise,ES7也决定支持await
首先查看一个实例:
var f= ()=> {
return new Promise((resolve, reject)=> {
setTimeout(function(){
console.log(1)
resolve(1)
}, 2000)
})
}
var tryAwait= async ()=>{
var data= await f()
console.log(data)
}
用同步的思维方式去解决异步的代码,省去了传统方式繁琐的回调和promise方式的多重promise。
注意项:
1.await只能在async函数内使用
2.await后面一般接着promise对象或其他可等待的对象,会阻塞代码,等待其返回值,当然也能是一般变量,但会立即执行
什么是其他可等待的对象,这个后面说
接下来是传统方式:
var f= ()=> {
setTimeout(function(){
console.log(1)
traditional(1)
}, 2000)
}
f()
var traditional= (data)=> {
console.log(data)
}
弊端: 代码繁琐,逻辑冗杂,在多重回调的情况下尤为如此(此例也许不明显,毕竟只是实例,但相信各位也明白)
单纯promise的方式:
var f= ()=> {
return new Promise((resolve, reject)=> {
setTimeout(()=> {
console.log(1)
resolve(1)
}, 2000)
})
}
f().then((data)=> {
console.log(data)
})
弊端: 每个then方法内部都是一个独立作用域,若是想共享数据,就要将部分数据暴露在外场,在then内部赋值一次
且要是有很多then方法,代码会充满Promise方法
本文参考: http://www.tuicool.com/articles/ZZnuQzZ
-------------------------------------------------
什么是要等待的值?
Promise对象当然可以
async function testAsync(){
let res= await returnP()
console.log(res)//3
}
function returnP(){
return new Promise((resolve)=>{
setTimeout(()=>{
resolve(3)
},3000)
})
}
testAsync()
then的写法也是可以的(then方法返回一个promise对象!)
async function testAsync(){
let res= await returnP()
console.log(res) //55
}
function returnP(){
return new Promise((resolve)=>{
setTimeout(()=>{
resolve(3)
},3000)
}).then(()=>{
return 55
})
}
testAsync()
----------------------------------------------------------
setTimeout?不行
async function testAsync(){
let res= await returnP()
console.log(res)
}
function returnP(){
setTimeout(()=>{
return
}, 3000)
}
testAsync()
await修饰的函数的返回值,可以(很有意思的写法,可形成async大串联!)
async function testAsync(){
let res= await returnP()
console.log(res)
}
async function returnP(){
var a= await aa()
return a
}
function aa(){
return new Promise((resolve)=>{
setTimeout(()=>{
resolve(33)
},1000)
})
}
testAsync()
另外有一种工作里常见的错误写法,这里也列举出来
async function testAsync(){
let res= await returnP()
console.log(res)
}
async function returnP(){
new Promise((resolve)=>{
setTimeout(()=>{resolve(1)},2000)
}).then(()=>{
return 100
})
}
testAsync()
async/await方法解析的更多相关文章
- async/await使用深入详解
async和await作为异步模型代码编写的语法糖已经提供了一段时间不过一直没怎么用,由于最近需要在BeetleX webapi中集成对Task方法的支持,所以对async和await有了深入的了解和 ...
- async/Await使用和原理
await/async是.NetFramework4.5出现的,是语法糖,由编译器提供的功能! await/async 是C#保留关键字,通常是成对出现,一般的建议是:要么不用,要么用到底 async ...
- ES7 之 Async/await 的使用
在 js 异步请求数据时,通常,我们多采用回调函数的方式解决,但是,如果有多个回调函数嵌套时,代码显得很不优雅,维护成本也相应较高. ES6 提供的 Promise 方法和 ES7 提供的 Async ...
- 异步编程之Async,Await和ConfigureAwait的关系
在.NET Framework 4.5中,async / await关键字已添加到该版本中,简化多线程操作,以使异步编程更易于使用.为了最大化利用资源而不挂起UI,你应该尽可能地尝试使用异步编程.虽然 ...
- Async,Await和ConfigureAwait的关系
[转自]https://mp.weixin.qq.com/s/h10V-FshGoaQUWFPfy-azg 在.NET Framework 4.5中,async / await关键字已添加到该版本中, ...
- Promise和async/await
1.promise对象 promise 对象有三种状态:pending(进行中).fulfilled(已成功)和 rejected(已失败).promise 对象的状态改变,只有两种可能:从 pend ...
- C#异步编程由浅入深(二)Async/Await的作用.
考虑到直接讲实现一个类Task库思维有点跳跃,所以本节主要讲解Async/Await的本质作用(解决了什么问题),以及Async/Await的工作原理.实现一个类Task的库则放在后面讲.首先回顾 ...
- .Net Core中无处不在的Async/Await是如何提升性能的?
一.简介 Async/Await在.Net Core中真的是无处不在,到处都是异步操作,那为什么要用?有什么作用?别人说能提升性能?网上一堆文章看的绕晕了也没说清楚, 所以这里从理论,实践,原理一个个 ...
- Axios及其async await封装
Axios(IE8+) 基于promise的http库可用于浏览器与node.js 1.特性 支持promise API 拦截请求和相应 转换请求数据和响应数据 取消请求 自动转换JSON数据 客户端 ...
随机推荐
- 用记事本写的java程序引用jar文件
1.将须要用的jar文件和java程序复制到同一个文件文件夹下 2.进行编译.编译的命令:javac -cp log4j-1.2.15.jar A.java 3.进行运行.运行的命令:java -cp ...
- 发现保存GIF格式后相素发生变化咋办
数学公式编辑器MathType主要的作用就是编辑公式用的,一些用户朋友编辑完公式希望把公式保存为“高分辨率”的GIF格式,但是在图片查看器中进行浏览查看时发现GIF的分辨率发生了变化,对于这种情况该如 ...
- Classification week6: precision & recall 笔记
华盛顿大学 machine learning :classification 笔记 第6周 precision & recall 1.accuracy 局限性 我们习惯用 accuracy ...
- python_selenium之第一个自动化脚本
python_selenium之第一个自动化脚本 上一节介绍了xpath的使用,接下来完成第一个自动化脚本 一.步骤: 1. 这里使用火狐浏览器,首先打开火狐浏览器 2. 使浏览器窗口最大化 3.输入 ...
- 2、easyUI-创建 CRUD可编辑dataGrid(表格)
在介绍这节之前,我们先看一下效果图: 双击可以进入编辑
- 图解Microsoft SQL Server——“远程过程调用失败 [0x800706be] 错误“。
今天在配置SqlServer启动参数时,发现"开始菜单"->“配置工具”->“SQL Server 配置管理器”中的“SQL Server 服务”一项,右边栏里显示的是 ...
- [HAOI2012] 容易题[母函数]
794. [HAOI2012] 容易题 ★★☆ 输入文件:easy.in 输出文件:easy.out 简单对比时间限制:1 s 内存限制:128 MB 秒 输入:easy.in 输出: ...
- 打日志--以python为例
日志报错要去修,要不然是隐患,总有一天会爆炸 增加日志是排错的好方法,不要不舍得加日志,比如怕代码变难看,怕日志输出太多. python logging exc_info sys.exc_info() ...
- IOS崩溃 异常处理(NSSetUncaughtExceptionHandler)
iOS已发布应用中对异常信息捕获和处理 代码下载地址:http://download.csdn.net/detail/daiyelang/6740205 iOS开发中我们会遇到程序抛出异常退出的情况, ...
- C#中的自定义控件中的属性、事件及一些相关特性的总结(转)
摘要: C#中的自定义控件中的属性(Property).事件(Event)及一些相关特性(Attribute)的总结 今天学习了下C#用户控件开发添加自定义属性的事件,主要参考了MSDN,总结并实 ...