Promise介绍
异步通信编程的一种解决方案
定义方式:
let p = new Promise((resolve,reject) => {
// 异步操作
if(true){
resolve('执行成功')
}else{
reject('执行失败')
}
}).then(value=>{
console.log(value)
}).catch(reason=>{
console.log(reason)
})
// 输出 执行成功
resolve表示执行成功后的操作【then】,reject表示执行失败后的操作【catch】
执行then后,依旧返回promise实例
let p1 = new Promise((resolve,reject) => {
setTimeout(()=>{
resolve('1.异步')
},3000)
})
let p2 = new Promise((resolve,reject) => {
setTimeout(()=>{
resolve('2.异步')
},800)
})
let p3 = new Promise((resolve,reject) => {
setTimeout(()=>{
resolve('3.异步')
},1500)
})
p1.then((value)=>{
console.log(value)
return p2
}).then((value)=>{
console.log(value)
return p3
}).then((value)=>{
console.log(value)
})
// 输出 1.异步
// 2.异步
// 3.异步
Promise.all()
助手函数,可以直接按照顺序,依次执行promise函数
let p = Promise.all([p1,p2,p3])
p.then((value)=>{
console.log(value)
})
// 输出 ['1.异步','2.异步','3.异步']
Promise.race()
助手函数,哪个promise先执行完,返回哪个
let p = Promise.race([p1,p2,p3])
p.then((value)=>{
console.log(value)
})
// 输出 2.异步
Promise提供 resolve() 和 reject(),直接返回成功或者失败的promise实例
let ps = new Promise.resolve('成功')
let pj = new Promise.reject('失败')
常用的场景,保持类型的统一
在有的方法中,通过条件的不同,返回的内容类型不一样,可以通过包装,让方法的返回内容类型一致,都是promise对象
网友评论