一,Promise简介
对于学习es6的难点之一,promise可以作为首选,因为作为es5的写法中回调写法问题,在数据量特点大的情况下,很可能出现回调地狱的情况,即当某个异步操作需要等待之前的异步操作执行完才能执行,就会使陷入无限的嵌套中。
而对于ES6,新出的promise,它是属于一个微队列,对于js引擎而言,是优先执行微队列的任务的,在使用promise时能较大的程度上解决回调问题,但也不是能完全的解决,所谓的回调地狱,在任务多的情况下promise也不能完美去解决这个问题,只是缓解了异步回调问题。
对于promise的使用,之前的博客有说过:
Promise介绍
二,async和await
对于async和await这两个关键字是出于优化promise写法而出现的,因为书写promise的比较的麻烦,后出现了这两个关键字
原生Promise的书写
<script>
//对于书写原生的promise
var pro = new Promise( (resolve , reject) =>{
//成功
resolve ('123');
//失败
reject ('失败');
})
pro.then(data =>{
//成功返回输出
console.log(data);
},err =>{
//失败返回输出
console.log(err);
})
</script>
相对于原生的promise的书写,async更加的简化了这的操作
<script>
async function text(){
//成功返回
return 123;
//失败返回、
throw '失败';
}
async function text1(){
//声明接收text返回的值
//await起到了等待的作用
var result = await text();
//输出
console.log(result);
}
//执行text1
text1();
</script>
通过async和await的连贯使用极简了promise的写法
三,async和await实现promise的状态变化问题
对于,async返回的promise的对象,必须要等到内部的await全部执行完毕后promise对象才能执行完毕后,才发生状态变化,除非遇到return语句返回,或者是抛出错误。
也即是async函数内部异步执行完,才能执行then方法的回调函数。