• 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]);
           });
    
    
  • 相关阅读:
    C#添加修改删除文件文件夹大全
    实用且不花哨的js代码大全
    vs2005 2008快捷键
    C#:String.Format数字格式化输出
    获取农历日期
    Vim 常用快捷键
    一个简单的makefile示例及其注释
    nginx源码剖析(1)概要
    利用Vim 打造开发环境(一)>Linux 字符界面 vim的配置
    Ubuntu 9.10设置摘要
  • 原文地址:https://www.cnblogs.com/bqh10086/p/13183851.html
Copyright © 2020-2023  润新知