JavaScript中的Promise详解

Promise代表一个异步操作,有三种状态:Pending(进行中).resolve(成功),reject(失败)

 

一旦确定那个状态就无法改变

基本用法

1.Promise对象是一个构造函数,用来生成Promise实例,构造函数接收函数作为参数,分别是:resolve,reject

2.用then()方法分别指定resolve,reject的回调函数

3. 如下代码只能执行成功回调,失败回调不会被执行    因为一旦确定那个状态就无法改变

  var p=new Promise((resolve,reject)=>{
   console.log(typeof resolve);  //function
   setTimeout(()=>{
     resolve()//成功回调
   },2000)
    setTimeout(()=>{
     reject()//失败回调
   },2000)
  })
  // then()中传递两个方法,成功回调,失败回调
  p.then(()=>{
    console.log('调用成功了');
    
  },()=>{
      console.log('调用失败了');
  })

 .then()  代码如上所示

then()中传递两个方法,成功回调,失败回调

.catch()

用于指定错误时的回调函数      不太常用

 

 all()

用于将多个Promise实例,封装成一个Promise

只有三个状态都成功,p的状态才是成功,有一个失败p的状态就是失败

var p=Promise.all([p1,p2,p3])

 

 var p1=new Promise((resolve,reject)=>{
     resolve()
  })
  var p2=new Promise((resolve,reject)=>{
     resolve()
  })
  var p3=new Promise((resolve,reject)=>{
     resolve()
     //reject()
  })
  var p=Promise.all([p1,p2,p3])
  p.then(()=>{
    console.log('成功');
    
  },()=>{
    console.log('失败');
    
  })

  var p1=new Promise((resolve,reject)=>{
     resolve()
  })
  var p2=new Promise((resolve,reject)=>{
     resolve()
  })
  var p3=new Promise((resolve,reject)=>{
   
     reject()
  })
  var p=Promise.all([p1,p2,p3])
  p.then(()=>{
    console.log('成功');
    
  },()=>{
    console.log('失败');
    
  })

 race()

只要p1,p2,p3只一个资源 率先改变,p的值就跟着改变,那个率先改变的Promise实例的返回值,就传给P的回调

 大家可以做道题练练手——>

这道题输入什么?

var p1=new Promise((resolve,reject)=>{
    setTimeout(()=>{
       resolve()
    },1000)
    
  })
  var p2=new Promise((resolve,reject)=>{
      setTimeout(()=>{
       resolve()
    },2000)
  })
  var p3=new Promise((resolve,reject)=>{
   
      setTimeout(()=>{
       reject()
    },3000)
  })
  var p=Promise.race([p1,p2,p3])
  p.then(()=>{
    console.log('成功');
    
  },()=>{
    console.log('失败');
    
  })
  

 

输出: 成功

 finally()

不管最后状态如何都会调用

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.指尖舞者

如果帮助到了你,请给点赞助支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值