Promise总结
介绍
promise是用来解决异步操作回调地狱问题的,它有三种状态:
- pending: 初始状态,既不是成功,也不是失败状态。
- resolved: 意味着操作成功完成。
- rejected: 意味着操作失败。
基本用法
js
var p=new Promise((resolve,reject)=>{
var flag=true;
if(flag){
return resolve("成功信息")
}else{
return reject("失败信息")
}
})
p.then(
function(data){
// 第一个函数接收成功信息,如果promise返回的是resolve则调用此函数
console.log(data) // "成功信息"
},
function(data){
// 第二个函数接收失败信息,如果promise返回的是reject则调用此函数,此函数可以省略用catch()接收失败信息
console.log(data)
}
)
实例方法
then()、catch()、finally()
这里的finally()不是标准方法
js
var p=new Promise((resolve,reject)=>{
var flag=true;
if(flag){
return resolve("成功信息")
}else{
return reject("失败信息")
}
})
p.then((data)=>{
//成功调用这里
}).catch((data)=>{
//失败调用这里
}).finally(()=>{
//不管成功还是失败都会调用这里
})
对象方法
Promise.all()
接收一个Promise对象组成的数组作为参数,当这个数组里的所有Promise对象全部变为resolve的时候,该方法才返回resolve状态结果。但如果数组中有一个Promise对象为reject的话,则直接返回reject状态结果
Promise.race()
使用方法和Promise.all一样,接收一个Promise对象组成的数组为参数。只要其中一个Promise对象变为Resolved或者Rejected状态,该方法直接返回相应状态的结果,进行后面的处理。
js
var p1=new Promise((res,rej)=>{
setTimeout(()=>{
res('a');
},1000)
})
var p2=new Promise((res,rej)=>{
setTimeout(()=>{
res('b');
},150)
})
var p3=new Promise((res,rej)=>{
setTimeout(()=>{
res('c');
},500)
})
var pro1=Promise.all([p1,p2,p3]);
pro1.then(data=>console.log(data)) //["a", "b", "c"]
var pro2=Promise.race([p1,p2,p3]);
pro2.then(data=>console.log(pp))
// 这里由于是p2先执行,返回的是resolve,所以结果为:Promise {<resolved>: "b"}