关于Promise原型方法async和await

    技术2022-07-12  68

    一,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方法的回调函数。

    Processed: 0.024, SQL: 9