欲了解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方法解析的更多相关文章

  1. async/await使用深入详解

    async和await作为异步模型代码编写的语法糖已经提供了一段时间不过一直没怎么用,由于最近需要在BeetleX webapi中集成对Task方法的支持,所以对async和await有了深入的了解和 ...

  2. async/Await使用和原理

    await/async是.NetFramework4.5出现的,是语法糖,由编译器提供的功能! await/async 是C#保留关键字,通常是成对出现,一般的建议是:要么不用,要么用到底 async ...

  3. ES7 之 Async/await 的使用

    在 js 异步请求数据时,通常,我们多采用回调函数的方式解决,但是,如果有多个回调函数嵌套时,代码显得很不优雅,维护成本也相应较高. ES6 提供的 Promise 方法和 ES7 提供的 Async ...

  4. 异步编程之Async,Await和ConfigureAwait的关系

    在.NET Framework 4.5中,async / await关键字已添加到该版本中,简化多线程操作,以使异步编程更易于使用.为了最大化利用资源而不挂起UI,你应该尽可能地尝试使用异步编程.虽然 ...

  5. Async,Await和ConfigureAwait的关系

    [转自]https://mp.weixin.qq.com/s/h10V-FshGoaQUWFPfy-azg 在.NET Framework 4.5中,async / await关键字已添加到该版本中, ...

  6. Promise和async/await

    1.promise对象 promise 对象有三种状态:pending(进行中).fulfilled(已成功)和 rejected(已失败).promise 对象的状态改变,只有两种可能:从 pend ...

  7. C#异步编程由浅入深(二)Async/Await的作用.

      考虑到直接讲实现一个类Task库思维有点跳跃,所以本节主要讲解Async/Await的本质作用(解决了什么问题),以及Async/Await的工作原理.实现一个类Task的库则放在后面讲.首先回顾 ...

  8. .Net Core中无处不在的Async/Await是如何提升性能的?

    一.简介 Async/Await在.Net Core中真的是无处不在,到处都是异步操作,那为什么要用?有什么作用?别人说能提升性能?网上一堆文章看的绕晕了也没说清楚, 所以这里从理论,实践,原理一个个 ...

  9. Axios及其async await封装

    Axios(IE8+) 基于promise的http库可用于浏览器与node.js 1.特性 支持promise API 拦截请求和相应 转换请求数据和响应数据 取消请求 自动转换JSON数据 客户端 ...

随机推荐

  1. 集合Set映射一对多(使用xml文件)

    如果持久化类设置了包含实体引用的对象,则需要使用一对多关联来映射集合(Set)元素. 我们可以通过任意一个Set集合来映射这个列表对象. 下面来看看看设置对象的持久化类. 在这种情况下,一个问题可以有 ...

  2. python 使用正则表达式的爬虫

    下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/article/list_5_1.html 打开之后,不难看到里面一个一个灰常有内涵的段子,当你进行翻页的时候,注 ...

  3. tinycore Network card configuration during exec bootlocal.sh

    question: tinycore在boot时, 运行bootlocal.sh脚本,其中有局域网通信的部分,一直跑不通,测试了一下才知道是运行bootlocal.sh的阶段,网络可能没有配置好,ip ...

  4. python:编写行政区域三级菜单(day 1)

    地区分三层结构例如: 大中华地区一级划分: 华东 华中 华北 西南 特别行政区 华南 ------------------------------------------------- 请输入你要查看 ...

  5. VS2008试用版到期解决办法----win7下VS2008升级补丁.zip

    打开好久没用的Visual studio 2008,才知道试用版已经到期了.在网上找来了序列号,可是连一个输入序列号的地方都没有,困惑了好久,终于找到了解决办法. 首先献上自己收集的Visual st ...

  6. java中使用MD5进行加密

    java中使用MD5进行加密     在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希 ...

  7. 【BZOJ2282】[Sdoi2011]消防 树形DP+双指针法+单调队列

    [BZOJ2282][Sdoi2011]消防 Description 某个国家有n个城市,这n个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为zi(zi<=1000). 这 ...

  8. git push 推送大文件失败的处理办法

    不小心把数据库备份文件放到git目录里了,导致无法上传代码. 首先参考了 这篇文章 http://www.cnblogs.com/qmmq/p/4604862.html. 按照文中一开始说的去做,可还 ...

  9. HTML随意记录

    HTML特殊符号对照表: http://www.cnblogs.com/knowledgesea/archive/2013/07/24/3210703.html

  10. Shiro 页面权限标签

    http://www.cnblogs.com/jifeng/p/4500410.html  不整理了,直接看人家写好的