zoukankan      html  css  js  c++  java
  • Vue学习-Promise的使用

    Promise的三种状态

    • pending:等待状态,如果正在进行网络请求,或者定时器没有到时间
    • fulfill:满足状态,当我们主动回调了resolve时,就处于该状态,并且会回调.then()
    • reject:拒绝状态,当我们主动架回调了reject时,就处于该状态,并且会回调.catch()
    new Promise((resolve,reject)=>{
         
          //模拟网络请求
          setTimeOut(function(){
               resolve("成功了")
               reject("error message!")
         },1000)
    
    }).then(data=>{
          console.log(data);
    }).catch(error=>{
          console.log(error);
    })
    
    
    • 用一个then(函数1,函数2)的简单写法(没有catch函数),同上面效果一样。函数1是resolve的回调,函数2是reject的回调
    new Promise((resolve,reject)=>{
         
          //模拟网络请求
          setTimeOut(function(){
               resolve("成功了")
               reject("error message!")
         },1000)
    
    }).then(data=>{
          console.log(data);
    },err=>{
          console.log(err);
    })
    

    Promise的链式调用

    • 第1次网络请求的结果,作为第2次网络请求的参数
      第2次网络请求的结果,作为第3次网络请求的参数
    new Promise((resolve,reject)=>{
         
          //模拟网络请求
          setTimeOut(function(){
               resolve("第1次成功了")
         },1000)
    
    }).then(data=>{
          console.log(data)
          
          return new Promise((res,rej)=>{
                //发送第2次网络请求
                setTimeOut(function(){
                           resolve("第2次成功了")
                   },1000)
          })
    }).then(data=>{
          console.log(data)
    
          return new Promise((res,rej)=>{
                //发送第2次网络请求
                setTimeOut(function(){
                           resolve("第3次成功了")
                   },1000)
          })
    }).then(data=>{
           console.log(data)
     });
    
    • 第1层请求后,第2层在第1层的结果上加aaa,第3层在第2层的结果上加bbb
    new Promise((resolve,reject)=>{
         
          //模拟网络请求
          setTimeOut(function(){
               resolve("第1次成功了")
         },1000)
    
    }).then(data=>{
          console.log(data)
          
          return new Promise((res,rej)=>{
               resolve(data+"aaaa")
          })
    }).then(data=>{
          console.log(data)
    
          return new Promise((res,rej)=>{
                 resolve(data+"bbb")
          })
    }).then(data=>{
           console.log(data)
     });
    
    • 简写Promise.resolve
    new Promise((resolve,reject)=>{
         
          //模拟网络请求
          setTimeOut(function(){
               resolve("第1次成功了")
         },1000)
    
    }).then(data=>{
          console.log(data)
          
          return Promise.resolve(data+"aaaa")
    }).then(data=>{
          console.log(data)
    
          return  Promise.resolve(data+"bbb")
    }).then(data=>{
           console.log(data)
     });
    
    • 简写省略掉Promise.resolve,内部会封闭为一个Promise
    new Promise((resolve,reject)=>{
         
          //模拟网络请求
          setTimeOut(function(){
               resolve("第1次成功了")
         },1000)
    
    }).then(data=>{
          console.log(data)
          
          return data+"aaaa"
    }).then(data=>{
          console.log(data)
    
          return  data+"bbb"
    }).then(data=>{
           console.log(data)
     });
    
    • 简写Promise.reject或throw,内部会封闭为一个Promise
    new Promise((resolve,reject)=>{
         
          //模拟网络请求
          setTimeOut(function(){
               resolve("第1次成功了")
         },1000)
    
    }).then(data=>{
          console.log(data)
          
          //return Promise.reject(data+"error")
          throw data+"error"
    }).then(data=>{
          console.log(data)
    
          return  data+"bbb"
    }).then(data=>{
           console.log(data)
     }).catch(err=>{
           console.log(err)
    });
    

    Promise.all的使用

    • 需求:2个请求后的结果都满足后,才继续往下执行
      Promise.all的第1个参数是一个Promise数组,里面可以放多个Promise.
      then方法的results也是一个数组,里面存放第个Promise的回调结果
         Promise.all([
          new Promise((resolve,reject)=>{
                $ajax({url:"url1",sucess:function(data){
                            resolve(data)
                      }})
            }),
          new Promise((resolve,reject)=>{
                $ajax({url:"url1",sucess:function(data){
                            resolve(data)
                      }})
            }),
    
          ]).then(results=>{
                 //这里的results也是一个数组,results[0]是放的第1个Promise的结果 ,results[1]是放的第2个Promise的结果    
                console.log(results[0]);
                console.log(results[1]);
           });
    
    
  • 相关阅读:
    (转)原始图像数据和PDF中的图像数据
    itextSharp 附pdf文件解析
    (转)pdf文件结构
    【iCore1S 双核心板_ARM】例程九:DAC实验——输出直流电压
    【iCore4 双核心板_FPGA】例程七:状态机实验——状态机使用
    【iCore4 双核心板_FPGA】例程六:触发器实验——触发器的使用
    【iCore4 双核心板_ARM】例程八:定时器PWM实验——呼吸灯
    【iCore4 双核心板_ARM】例程七:WWDG看门狗实验——复位ARM
    【iCore1S 双核心板_FPGA】例程七:基础逻辑门实验——逻辑门使用
    【iCore1S 双核心板_FPGA】例程六:状态机实验——状态机使用
  • 原文地址:https://www.cnblogs.com/bqh10086/p/13183851.html
Copyright © 2011-2022 走看看