基础知识
testPromise() {
let p = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('执行完成')
resolve('我成功了')
// reject('我失败了')
}, 2000);
})
return p
},
// 调用
this.testPromise().then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
Promise的三种状态:pending(待定) 、fulfilled(已执行) 、rejection(已拒绝)
一个构造函数:new Promise
两个实例方法:.then 对应fulfilled .catch对应rejection
两个常用方法:Promise.all、Promise.race
使用promise避免回调地狱
// 日常回调地狱
getData1(data1 => {
getData2(data1, data2 => {
getData3(data2, data3 => {
getData4(data3, data4 => {
getData5(data4, data5 => {
// 终于取到data5了
})
})
})
})
})
// 使用Promise避免回调地狱
getData1()
.then(getData2)
.then(getData3)
.then(getData4)
.then(getData5)
.then(data => {
// 取到最终data了
})
})
相关函数
- Promise.all
Promise.all([this.testPromise(), this.testPromise1(), this.testPromise2()]).then(res => {
console.log('--------------promise.all success-----------', res)
}).catch(err => {
console.log('--------------promise.all fail-----------', err)
})
并行执行异步操作的能力,会在所有异步操作执行完后才执行回调。如果都执行成功,就会执行then的回调;如果有一个执行失败,就会执行catch的回调。
- Promise.race
all方法的效果实际上是「谁跑的慢,以谁为准执行回调」,那么相对的就有另一个方法「谁跑的快,以谁为准执行回调」,即Promise.race。使用场景