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()

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

 


版权声明:本文为qq_56989560原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。