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()
不管最后状态如何都会调用