最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • javascript的promise的复习

    正文概述 掘金(不忘本尊)   2021-03-27   617

    异步

    什么是异步

    ​ 同步就像舔狗,你和女神聊天的时候,女神没有回你消息,你就什么都不干,一直等女神回消息 。异步就像海王,在和妹子A聊天的时候,妹子A没有回消息,就先和另外一个妹子B聊天,当妹子A回消息的时候在回来和妹子A聊天。这可以让海王撩妹的效率大大提高

    ​ 在JavaScript中的异步任务是指不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程,当我们打开网站时,文件的加载,ajax请求,延时定时函数等其实就是一个异步任务,这也使得运行的效率大大提高。

    异步出现的第一个问题

    文件的加载和海王聊天又不一样,有时候文件A需要文件B的依赖,所以要先加载完文件B在加载完文件A,而异步加载完毕的顺序是不固定的。

    解决这个问题的方法就是将文件A的请求写在文件B请求的回调函数里。

    第二个问题

    当文件A依赖文件B,文件B依赖文件C,一直这样依赖好几个,就又会发现一个问题,那就是循环嵌套,看的眼睛都花了,极其难以维护和阅读。

    为了解决这个问题就出现了promise,promise将无限套娃变成火车车厢

    Promise的使用

    1. promise最基本的使用:

      new Promise(function(resolve, reject) {
        // resolve();//执行成功的结果
        reject()//执行失败的结果
      }).then(
        value=>{
            console.log('任务一成功');
        },
        reason=>{
            console.log('任务一失败');
        }
      ).then(//这里又返回一个新的promise,所以可以接着用then方法
        value=>{
            console.log('任务二成功');
        },
        reason=>{
            console.log('任务二失败');
        }
      )
      
      
      
    2. 主任务,宏任务,微任务

     setTimeout(function() {
         console.log('宏任务');
     })
     new Promise(function(resolve, reject) {
         resolve();
         console.log('主任务');
     }).then(//promise返回后才会添加到微任务中
         value=>{
             console.log('微任务');
         }
     )
     console.log('主任务2');
     
     //执行顺序为主任务-微任务-宏任务,当为同一类型的任务,执行顺序一般为从上到下
    
    1. promise状态:准备状态,成功状态,失败状态,状态不可逆,不能中断

       
       new Promise(function(resolve, reject) {
           resolve();//已经进入成功状态,下面的失败状态就不会发生改变
           reject();
       }).then(
           value=>{
               console.log('成功');
           },
           reason=>{
               console.log('失败');
           }
       )
      
    2. promise的then方法是接的事上一个返回的promise的状态

       let p1= new Promise((resolve, reject) => {
           reject()
       })
       
       new Promise(function(resolve, reject) {
           resolve(p1);//返回p1的状态
       }).then(
           value=>{
               console.log('成功');
           },
           reason=>{
               console.log('失败');
           }
       )
       
      
    3. promise的catch方法放最后统一获取错误,失败状态

       new Promise(function(resolve, reject) {
        reject('失败');
       })
       .then(
        value=>{
            console.log('任务一成功');
        }
       )
       .then(//这里又返回一个新的promise,所以可以接着用then方法
        value=>{
            console.log('任务二成功');
        }
       )
       .catch(reason=>{
           console.log('catch'+reason);
       })
      
    4. promise的finally方法,无论成功与否都会执行

       new Promise(function(resolve, reject) {
        resolve('成功');//执行成功的结果
        reject('失败')//执行失败的结果
       }).finally(function() {
           console.log('一直执行');
       }).catch(function(err) {
       console.log(err);
       })
      
    5. promise的resolve方法,相当于直接获取成功的状态

    6. promise的reject方法,相当于直接获取失败状态

    7. promise的all方法,当成功时获取的都是成功的状态

       let p1=new Promise((resolve, reject) => {
           resolve('成功1');
       })
       
       let p2=new Promise((resolve, reject) => {
           resolve('成功2');
       })
       
       Promise.all([p1,p2]).then(result=>{
           console.log(result);
       })
      
    8. promise的allSettled方法,可以不同的promise把成功和失败的状态全部获取

       let p1=new Promise((resolve, reject) => {
           // resolve('成功1');
           reject('失败')
       })
       
       let p2=new Promise((resolve, reject) => {
           resolve('成功2');
       })
       
       Promise.allSettled([p1,p2]).then(result=>{
           console.log(result);
       })
      
    9. promise的race方法,可以获取不同promise的状态,但只会获取最快的一个

       let p1=new Promise((resolve, reject) => {
           setTimeout(() => {
               resolve('成功1');
           },1000)
       })
       
       let p2=new Promise((resolve, reject) => {
           resolve('成功2');
       })
       
       Promise.race([p1,p2]).then(result=>{
           console.log(result);
       })
      

    async,await的使用

    async和await是promise的语法糖,async相当于new Promise,await相当于then


    起源地下载网 » javascript的promise的复习

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元