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. JAVA框架Struts2(二)

    一:Struts2执行流程: 1)编写页面,点击超链接,请求提交到服务器端. 2)请求先经过Struts2核心过滤器(StrutsprepareAndexectuterfilter). 3)过滤器的功 ...

  2. dom4j加载xml文件

    ## dom4j加载xml文件 ``` // 1. 加载xml文件 InputStream is = MyTest.class.getResourceAsStream("user.xml&q ...

  3. 修复在“Android 在ScrollView中嵌入ViewPage后ViewPage不能很好的工作的问题解决”这篇博客中MyScrollView出现滑动一会就不会上下滑动的问题

    在“Android 在ScrollView中嵌入ViewPage后ViewPage不能很好的工作的问题解决”,这篇博客中的大部分问题已经解决了. 唯一遗憾的是,ViewPage随人能够工作了,但是My ...

  4. HDU 3342 Legal or Not(有向图判环 拓扑排序)

    Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  5. DRUPAL7 : 安装中文版本时遇到的问题

    http://yeenav.com是基于Drupal 7+汉化资源 搭建. 期间遇到一些麻烦, 做个记录. 首先把语言包drupal-7.0.zh-hans.po 放在htdocs/drupal-7. ...

  6. Excel frequency函数

    计算连续次数最常用的函数就是FREQUENCY,下面就这个函数在计算连续次数的应用做一个详细图解.首先,我们需要了解一下FREQUENCY函数的计算原理.    FREQENCY(数据区域,用于设置区 ...

  7. Swift与OC代码转换实例

    1. Objectice-C code: NSShadow *shadow = [NSShadow new]; [shadow setShadowColor:[UIColor colorWithRed ...

  8. odoo返写数据

    #确认按钮 反写回合同页面,当前页面反写数据: def action_split_order_ht(self,cr,uid,ids,context=None): assert len(ids)==1 ...

  9. Dozer 使用小结

    这篇文章是本人在阅读Dozer官方文档(5.5.1版本,官网已经一年多没更新了)的过程中,整理下来我认为比较基础的应用场景. 本文中提到的例子应该能覆盖JavaBean映射的大部分场景,希望对你有所帮 ...

  10. WPF Style

      <Application x:Class="WzlyTool.App" xmlns="http://schemas.microsoft.com/winfx/20 ...