Promise用法

什么是promise
解决地狱回调问题
它可以进行链式调用
有三种状态分别是 :pending 初始状态,进行中 fulfilled 成功状态,请求成功 了 rejected 失败状态,请求失败了 Promise的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由 pending变成fulfilled或者由pending变成rejected。

promise有哪些API方法:.then(),.catch(),.finally(),.all(),.race()
应用场景:封装ajax,axios的get,post封装,微信小程序中封装wx.request(),uniapp开发中uni.request()

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="jquery.js" charset="utf-8"></script> <!-- 引入jquery插件 -->
    <script>
    //es6中new Promise() 作用把异步操作改成同步执行
    //   console.dir(Promise) //可查看对象上的所有属性与方法
/*   //一.Promise基础用法 
      let p=new Promise((resolve,reject)=>{
		  //内部放异步请求的内容 ajax ,成功的通过resolve回调出去,失败的通过reject回调出去
		//   resolve('成功了')  //状态由pending变为fulfilled
		  reject('失败了啊') //状态由pending变为rejected
	  })
	  //then里面是方法,代表请求成功或失败执行的回调
	  //方法1
	//   console.log('18三种状态',p) //promise返回的是一个对象
	//  p.then((res)=>{ //成功回调
	// 	  console.log(20,res)
	//   },(err)=>{ //失败回调
	// 	  console.log(22,err)
	//   }) 
	   
	 //方法2
	 p.then((res)=>{ //成功回调
	 		  console.log('成功回调',res)
	 }).catch((err)=>{ //失败回调
	 		  console.log('失败回调',err)
	 }).finally(()=>{
		 console.log('不管成功与失败都会执行');
	 })  */
	   



//用promise如何解决多层回调地狱问题?
//解决方法1-请求多个结果,在内层判断
// let data1=getAxios('data/1.json') 
// let data2=getAxios('data/2.json') 
  
// data1.then(res=>{
//     console.log('81第1个结果',res);
//     if(res){
//         data2.then(res1=>{
//            console.log('93第2个结果',res1);
//         })
//     }
// })

//解决方法2-promise中.then链式调用
//   getAxios('data/1.json')
//   .then(res=>{
//     console.log(101,res);
//     return getAxios('data/2.json')  //返回,以供下次调用
//   })
//   .then(res=>{
//     console.log(102,res);
//   })
    </script>
  </head>
  <body>

  </body>
</html>

** 二.Promise内部要的是异步请求结果,ajax,定时器等-实际运用用它封装网络请求$.ajax(),wx.request()**


   let p= new Promise((resolve,reject)=>{
           $.ajax({
               url:'data/1.json',
            //    method:'get',  //post
            //    data:{},
               success:function(res){
                //   console.log(41,res);
                  resolve(res)
               },
               error:function(err){
                // console.log(45,err);
                reject(err)
               },
           })
    }) 

    p.then((res)=>{
         console.log(52,res);
    }).catch((err)=>{
         console.log(54,err);
    }).finally(()=>{
        console.log('不管成功与失败都会执行');
    }) 

三.Promise封装-axios原理



function getAxios(url){
   return new Promise((resolve,reject)=>{
           $.ajax({
               url:url, //接口路径
            //    method:'get',  //post
            //    data:{},
               success:function(res){
                //   console.log(41,res);
                  resolve(res)
               },
               error:function(err){
                // console.log(45,err);
                reject(err)
               },
           })
    }) 
}


//调用promise
 getAxios('data/1.json').then(res=>{
     console.log(81,res);
 })


四、promise其它api方法-多个接口都请求到

 Promise.all[promise1,promise2,...]返回数组。
  let p1=getAxios('data/1.json') 
  let p2=getAxios('data/2.json') 
   Promise.all([p1,p2]).then(res=>{
       console.log('all都执行',res);
       let [a,b]=res   //解构下
       console.log(a,b);
   }).catch(err=>{
       console.log("失败了");
   })
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值