基礎(chǔ)知識
testPromise() {
let p = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('執(zhí)行完成')
resolve('我成功了')
// reject('我失敗了')
}, 2000);
})
return p
},
// 調(diào)用
this.testPromise().then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
Promise的三種狀態(tài):pending(待定) 、fulfilled(已執(zhí)行) 蒸辆、rejection(已拒絕)
一個(gè)構(gòu)造函數(shù):new Promise
兩個(gè)實(shí)例方法:.then 對應(yīng)fulfilled .catch對應(yīng)rejection
兩個(gè)常用方法:Promise.all、Promise.race
使用promise避免回調(diào)地獄
// 日尘迹回調(diào)地獄
getData1(data1 => {
getData2(data1, data2 => {
getData3(data2, data3 => {
getData4(data3, data4 => {
getData5(data4, data5 => {
// 終于取到data5了
})
})
})
})
})
// 使用Promise避免回調(diào)地獄
getData1()
.then(getData2)
.then(getData3)
.then(getData4)
.then(getData5)
.then(data => {
// 取到最終data了
})
})
相關(guān)函數(shù)
- 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)
})
并行執(zhí)行異步操作的能力袄膏,會在所有異步操作執(zhí)行完后才執(zhí)行回調(diào)旺上。如果都執(zhí)行成功咽笼,就會執(zhí)行then的回調(diào)招刨;如果有一個(gè)執(zhí)行失敗,就會執(zhí)行catch的回調(diào)灵份。
- Promise.race
all方法的效果實(shí)際上是「誰跑的慢仁堪,以誰為準(zhǔn)執(zhí)行回調(diào)」,那么相對的就有另一個(gè)方法「誰跑的快填渠,以誰為準(zhǔn)執(zhí)行回調(diào)」弦聂,即Promise.race。使用場景