Promise

console.dir(Promise)
        //我写的东西,严格意义上来讲不是自己的原创,是踩在巨人的肩膀上的学习笔记,加入自己的理解,以便日后翻阅容易理解
        //我是在这个博主上学习的,讲的很好很容易理解 http://www.cnblogs.com/lvdabao/p/es6-promise-1.html
       // http://www.cnblogs.com/lvdabao/
       // Promise 是一个构造函数 与new配合使用,new出来的对象上面有then,catch方法
       //  Promise构造函数里接收一个参数,是一个函数,里面接收两个参数:resolve,reject 
      
      // resolve是函数成功后的回调函数,reject是函数失败后的回调函数(说法不准确,但是这样有助于我的理解)
    //    function runasync(){
    //         var p= new Promise(function(resolve,reject){
    //             setTimeout(() => {
    //                 console.log('执行完成');
    //                 resolve('resolve 成功回调')
    //             }, 2000);
                
    //         });
    //         return p;
    //    }
    //    runasync().then(function(data){
    //         console.log(data)
    //    });       
       //runasync()方法成功之后。直接调用then方法,他很就收一个参数,是函数,并且拿到嗲用resolve时,传的参数
       //输出结果就是 执行完成
       //            resolve 成功回调
       //其实就是runasync()方法成功之后执行了一个回调函数
        
        //链式操作的用法
        // function func1(){
        //     var p=new Promise(function(resolve,reject){
        //         setTimeout(()=>{
        //             console.log('func1')
        //             resolve('canshufunc1')
        //         },2000)
        //     })
        //     return p;
        // }
        // function fun2(){
        //     var p=new Promise(function(resolve,reject){
        //         setTimeout(()=>{
        //             console.log('fun2')
        //             resolve('canshufun2')
        //         },2000)
        //     })
        //     return p;
        // }
        // function fun3(){
        //     var p=new Promise(function(resolve,reject){
        //         setTimeout(()=>{
        //             console.log('fun3')
        //             resolve('canshufun3')
        //         },2000)
        //     })
        //     return p;
        // }
        // func1().then(function(data){
        //     console.log(data)
        //     return fun2();
        // }).then(function(data1){
        //     console.log(data1)
        //     return '直接返回数据'
        // }).then(function(data){
        //     console.log(data)
        // })
        //then里面的这个参数是一个方法,对应的是 Promise方法里的参数resolve,data就是里面的参数
      //也可以直接返回数据    return ‘直接返回数据’ ,这样最后一步的输出就是 ‘直接返回数据’


      //reject的用法 (失败的回调自我理解)
    //   function  rejectfun(){
    //       var p=new Promise(function(resolve,reject){
    //           setTimeout(()=>{
    //               var num=Math.ceil(Math.random()*10); //生成1-10的随机数;
    //               if(num<=5){
    //                   resolve(num)
    //               }else{
    //                   reject(num+'数字太大啦')
    //               }
    //           })
    //       })
    //       return p;
    //   }
    //   rejectfun().then(
    //       function(data){      
    //         console.log('resolve')
    //         console.log(data)
    //       },
    //       function(data){
    //           console.log('reject')
    //           console.log(data)
    //       }
    //   )
      //then中第一个参数对应的是resolve‘成功’,第二个参数对应的是reject‘失败’
      
      //catch ,和then的第二个参数的类似,就是then执行失败执行catch,用法
    //   rejectfun().then(function(data){
    //     console.log('resolve')
    //       console.log(data)
    //       console.log(dadadadd)
    //   }).catch(function(reason){
    //     console.log('reject')
    //       console.log(reason)
    //   })
      // dadadadd因为没有定义,所以会报错,按以往的程序,就不会继续放下走了,现在程序报错会走catch告知,程序继续
      //all 用法
      //Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作完成后才执行回调函数
      //Promise 的all方法提供了并行执行异步操作的能力,并且在所有异步操作完成后才执行回调函数
      function all1(){
          
          var p =new Promise(function(resolve,reject){
                setTimeout(function(){
                    console.log('all1执行')
                    resolve('all111111')
                },3000)
            
          })
          return p;
      }
      function all2(){
        var p =new Promise(function(resolve,reject){
                setTimeout(function(){
                    console.log('all2执行')
                    resolve('all222')
                },1000)
            
          })
          return p;
      }
      function all3(){
        var p =new Promise(function(resolve,reject){
                setTimeout(function(){
                    console.log('all3执行')
                    resolve('all333')
                },2000)
            
          })
          return p;
      }
    //   Promise.all([all1(),all2(),all3()]).then(function(data){          
    //       console.log(data)
    //   })    
     // all方法,就是等着几个函数都加载完了,再走then的函数 ,是以最后一个加载完的函数为准【谁跑的慢以谁为准】。
     //race方法,也是并行执行异步操作,但这个是【谁跑的快,以谁为准,谁跑赢了,then就执行谁】
    //  Promise.race([all1(),all2(),all3()]).then(function(data){          
    //       console.log(data)
    //   })
    //   all2执行完了,执行then,然后接着执行 all1 all3
    //   应用场景举例:比如请求一个图片资源
      function raceimg(){
          var p=new Promise(function(resolve,reject){
              var img=new Image();
              img.οnlοad=function(){
                  resolve(img)
              }
              img.src='xxxxx';
          })
          return p;
      }
      function timeout(){
          var p=new Promise(function(resolve,reject){
              setTimeout(()=>{
                  reject('图片请求超时')
              },2000)
          })
          return p;
      }
      Promise.race([raceimg(),timeout()]).then(function(results){
          console.log(results)
      }).catch(function(reason){
          console.log(reason)
      })
    // raceimg()和timeout()谁先跑赢了就走谁,raceimg赢了,走then  要是5秒内图片加载不出来,就走catch
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值