三种状态(es6)
pending,fufiled,rejected
在promise种状态不可逆,时间不可倒流
promise时间有一个pending等待状态,如果实现fufiled状态,没实现rejected状态
解决了赘述问题
new promise((resolve,reject) => {
setTimeout(()=>{]
console.log(1)
resolve()
},1000)
}).then((res)=>{
setTimeout(()=>{
console.log(2)
},1000)
})
promise.all()
let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('p1')
resolve()
},2000)
})
let p2 = new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('p2')
resolve()
},1000)
})
let p3 = new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('p3')
resolve()
},3000)
})
Promise.all([p1,p2,p3]).then((res)=>{
console.log('all over')
console.log(res)
}).catch((err)=> {
console.log('失败')
console.log(err)
})
全部成功时候执行all.then,如果我们修改其中一个为reject()那么then不能顺利执行,一个任务执行失败不会影响下面任务继续执行
promise.race()
let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('p1')
resolve()
},2000)
})
let p2 = new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('p2')
resolve()
},1000)
})
let p3 = new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('p3')
resolve()
},3000)
})
Promise.race([p1,p2,p3]).then((res)=>{
console.log('all over')
console.log(res)
}).catch((err)=> {
console.log('失败')
console.log(err)
})
//race比赛竞赛,只要有一个任务完成then立即执行,但是不会影响其他promise执行
用途:请求超时