码迷,mamicode.com
首页 > 其他好文 > 详细

async await promise

时间:2017-06-25 10:20:06      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:color   意义   解决   rom   pre   wait   操作   catch   函数返回   

async 异步函数,以后可能会用得很广。

1、箭头函数: 没有{}时不写return 也有返回值

2、Promise : 异步神器,很多异步api都是基于Promise

3、new Promise().then().then().catch() :第一个then触发条件:是 Promise() 实例化时resolve()触发, 第二个及以后的then() 触发条件是前一个then() 代码被执行一遍,不包括异步代码,如果有return,后面的代码不再执行,并且将return值作为下一个then的参数

4、async: 异步函数,可以使用await 等待promise resolve的结果,是基于Promise的

5、await : 后面必须跟Promise对象,若非Promise,则不会拦截后面代码执行。当promise对象resolve过后并且执行完then里面的代码,就执行下一步代码,不resolve不会触发下一行代码执行。

需注意:如果then()中需要异步操作,不会等then中的异步执行完过后再执行下一个then()的函数。原因就是,异步函数中,没有地方给你return给then()回调函数。解决方案是async函数。

也就是说Promise对于异步的帮助 其实很有限,.then()就只有第一个有用而已。

 1   const aa = _ => new Promise((res, rej) => { // 设置aa函数返回promise对象
 2         setTimeout(function() {
 3             console.log(‘1‘)
 4             res(‘2‘)
 5         }, 1000);
 6     })
 7   let bb = async function() {
 8       await aa().then((res) => { // await会等待aa()执行完,并且then代码也执行完,当然,then代码里面的异步操作不会执行。
 9         console.log(res)
10         setTimeout(function(){  // 我在这儿then中写了一个异步函数,这样写毫无意义,
11             console.log(‘4‘) // return的值到了setTimeout()的函数中,then中的代码执行完直接进入下一个then
12             return ‘sdf‘
13         }, 2000)
14       }).then(res => {
15           console.log(res) // undifined
16       })
17       console.log(‘3‘)
18   }
19   console.log(bb()) // Promise {<pending>}
// console 结果 :
Promise { <pending> }
1
2
undifined
3
4


 

async await promise

标签:color   意义   解决   rom   pre   wait   操作   catch   函数返回   

原文地址:http://www.cnblogs.com/gsgs/p/7074984.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!