JavaScript 中的 async/await 是属于比较新的知识,在ES7中被提案在列,然而我们强大的babel粑粑已经对它进行列支持!

如果开发中使用了babel转码,那么就放心大胆的用吧。

在vue中使用的例子请到最下面

1. 何为 async

作为新时代的玩意儿,如果对promise不了解,需要先补习一下  Promise 相关的知识。

async 顾名思义,就是异步的意思, 看上去是一个异步标识,就是告诉我们这个函数中有异步执行的代码。

像这样 标识:

async function getData() {

    // ......

}

这就是说getData函数里面有异步的东西,那么异步的东西是什么呢? 其实就是个Promise,

就算你不写, 直接return 个任何, 它都会封装一下,让你return的东西出现在一个Promise的resolve() ,就是这么刚!

例子:  这里  getData_1 和 getData_2 当你使用await 执行他们时, 结果是一样的,得到的也是一样的, 都返回一个 Promise对象, 而 getData_1 则是async封装的Promise对象并将 '100' 放到resolve() 的参数中:resolve('100')。

function getData_1 () {
return '100'
} function getData_2 () {
return new Promise((resolve, reject) => {
resolve('100')
})
}

2. 何为 await

await 就是等待 async执行完,才会执行后面的东西, 等待的东西是异步的,它就会阻塞当前代码, 阻塞??!!

别担心, 它只能在async函数里使用, 虽然阻塞,但是是异步的。

来个例子:

async function getData_1 () {
return '100'
} function getData_2 () {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('200')
}, 2000)
})
} async function run () { const data_1 = await getData_1();
console.log(data_1); const data_2 = await getData_2();
console.log(data_2);
} run ();
getData_1 前面即使不声明async,使用await也是可以的, 因为await 啥都能等!
1.如果等到的是promise, 它就把promise的resolve的参数返回,
2.如果等到的是普通东西,就直接返回这个东西。
就像上面的data_1 , 就算 getData_1 没有async 它的结果也一样的。 在run函数中, data_1 后的代码需要getData_1 执行完毕才会执行,
data_1 得出以后, data_2其实会2秒之后才会得出, 但是此时,它会等2秒,
直到data_2得出以后,才会执行后面的console

在vue中的例子:

export default {

    mounted () {
this.run();
console.log('step2')
},
methods: {
queryData_1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('queryData_1')
}, 2000)
})
},
queryData_2() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('queryData_2')
}, 2000)
})
},
queryData_3() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('queryData_3')
}, 2000)
})
},
async run () {
const data_1 = await this.queryData_1();
console.log(data_1) // 2秒后打印 data_1
const data_2 = await this.queryData_2();
console.log(data_2) // 4秒后打印 data_2
const data_3 = await this.queryData_3();
console.log(data_3) // 6秒后打印 data_3
}
}
}

js中的async await的更多相关文章

  1. JS中的async/await的执行顺序详解

    虽然大家知道async/await,但是很多人对这个方法中内部怎么执行的还不是很了解,本文是我看了一遍技术博客理解 JavaScript 的 async/await(如果对async/await不熟悉 ...

  2. js循环中使用async/await踩过的坑

    最近写koa的时候遇见需要在循环中使用async/await的情况,当然第一反应就是直接上forEach,然后就直接翻车了... 直接上代码: function handleSql(val) { re ...

  3. 【TypeScript】如何在TypeScript中使用async/await,让你的代码更像C#。

    [TypeScript]如何在TypeScript中使用async/await,让你的代码更像C#. async/await 提到这个东西,大家应该都很熟悉.最出名的可能就是C#中的,但也有其它语言也 ...

  4. [C#] .NET4.0中使用4.5中的 async/await 功能实现异

    好东西需要分享 原文出自:http://www.itnose.net/detail/6091186.html 在.NET Framework 4.5中添加了新的异步操作库,但是在.NET Framew ...

  5. 在Silverlight中使用async/await

    现在 async/await 大行其道,确实,有了 async/await ,异步编程真是简单多了,个人觉得 async/await 的出现,给开发者还来的方便,绝不亚于当年 linq 的出现. 但要 ...

  6. 在现有代码中通过async/await实现并行

    在现有代码中通过async/await实现并行 一项新技术或者一个新特性,只有你用它解决实际问题后,才能真正体会到它的魅力,真正理解它.也期待大家能够多分享解一些解决实际问题的内容. 在我们遭遇“黑色 ...

  7. [C#] .NET4.0中使用4.5中的 async/await 功能实现异步

    在.NET Framework 4.5中添加了新的异步操作库,但是在.NET Framework 4.0中却无法使用.这时不免面临着抉择,到底是升级整个解决方案还是不使用呢? 如果你的软件还没发布出去 ...

  8. 理解ES7中的async/await

    理解ES7中的async/await 优势是:就是解决多层异步回调的嵌套 从字面上理解 async/await, async是 "异步"的含义,await可以认为是 async w ...

  9. .NET4.0中使用4.5中的 async/await 功能实现异步

    在.NET Framework 4.5中添加了新的异步操作库,但是在.NET Framework 4.0中却无法使用.这时不免面临着抉择,到底是升级整个解决方案还是不使用呢? 如果你的软件还没发布出去 ...

随机推荐

  1. mysql安装,oracle安装

    mysql 版本:5.5.20 直接是是是装完, 密码设为123456, 检查服务, 然后装navicat 32位,64位均可,连接时输入root,123456. 连接成功!为所欲为操作数据库. ht ...

  2. c语言gets()函数与它的替代者fgets()函数

    在c语言中读取字符串有多种方法,比如scanf() 配合%s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回.如果要读取一行字符串,比如: I love BIT 这种情况,scanf() ...

  3. Android 截取屏幕图片并保存

    Android市场上有很多屏幕截图软件,把当前屏幕截取出来并保存,这一节我们就来看看屏幕截图的具体实现. 操作步骤: 1.创建一片屏幕大小的缓冲区,用于存放屏幕大小的图片 Bitmap bitmap ...

  4. ansible 远程以普通用户执行命令

    1. ansible 10.0.0.1 -m raw -a "date" -u www 2.在ansible的主机配置文件中指定ssh_uservi/etc/ansible/hos ...

  5. centos6.4安装 zabbix agent

    1.防火墙设置 允许zabbix-agent的10050端口通过  iptables -A INPUT -p tcp --dport 10050 -j ACCEPT  2.安装zabbix agent ...

  6. C 语言的关键字static 和C++ 的关键字static 有什么区别

    C 中static 用来修饰局部静态变量和外部静态变量.函数. C++中除了上述功能外,还用来定义类的成员变量和函数.即静态成员和静态成员函数. 注意:编程时 static的记忆性,和全局性的特点可以 ...

  7. solr服务器搭建与Tomact整合及使用

    一:solr服务器的搭建 1:搭建全新的为solr专用的solr服务器: 在自己电脑上搭建两台Tomact服务器,一台仍为应用服务器,一台作为solr服务器,应用服务器按照正常Tomact服务器搭建即 ...

  8. web安全入门课程笔记——SQL漏洞分析与利用

    3-1SQL语言基础 3-2ACCESS手工注入 And1=1是什么意思:进入数据库查询信息,判断是否存在注入点. Exists(select*from admin):查询语句 3-6MySQL手工注 ...

  9. R语言的数据输入

    既然了解了R语言的基本数据类型,那么如何将庞大的数据送入R语言进行处理呢?送入的数据又是如何在R语言中进行存储的呢?处理这些数据的方法又有那些呢?下面我们一起来探讨一下. 首先,数据输入最直接最直观的 ...

  10. MySql+Socket 完成数据库的增查Demo

    需求: 利用MySql数据库结合前端技术完成用户的注册(要求不使用Web服务技术),所以 Demo采用Socket技术实现Web通信. 第一部分:数据库创建 数据库采用mysql 5.7.18, 数据 ...