Promise含義:
Promise 是異步編程的一種解決方案家浇,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大
Promise對象的特點(diǎn)
Promise對象的狀態(tài)不受外界影響卤唉。只有異步操作的結(jié)果救鲤,可以決定當(dāng)前是哪一種狀態(tài),任何其他操作都無法改變這個(gè)狀態(tài)
一旦狀態(tài)改變胡控,就不會再變氮昧。Promise對象的狀態(tài)改變娶桦,只有兩種可能:從pending變?yōu)閒ulfilled和從pending變?yōu)閞ejected
Promise三種狀態(tài)
pending 準(zhǔn)備狀態(tài)
fulfilled 成功狀態(tài)(resolve)
rejected 失敗狀態(tài)(reject)
最終只有兩個(gè)狀態(tài),1狞悲、準(zhǔn)備 2撮抓、成功或者失敗
示例代碼:
// 參數(shù):回調(diào)函數(shù)
const p = new Promise(function(resolve, reject) {
// 異步操作成功就調(diào)用 resolve
// 異步操作失敗就調(diào)用 reject
setTimeout(function(){
resolve('resolve成功了')
// 參數(shù):表示錯(cuò)誤信息
// reject('出錯(cuò)了呀')
}, 2000)
})
// 使用
p.then(function(data) {
// data 表示成功的數(shù)據(jù)
console.log('p操作成功', data)
return 666
}).then(function(data1) {
console.log(data1)
}).catch(function(err) {
// err 表示錯(cuò)誤信息
console.log(err)
})
Promise使用實(shí)例(解決了回調(diào)地獄問題)
.then方法可以傳遞兩個(gè)參數(shù),一個(gè)是成功的回調(diào)一個(gè)是失敗的回調(diào)
.then方法可以連寫效诅,但是連寫的時(shí)候一定要在上一個(gè).then方法中返回一個(gè)新的promise對象
示例代碼
function timeout(time){
return new Promise(function(resolve, reject){
setTimeout(function(){
resolve()
},time)
})
}
timeout(1000)
.then(function(){
console.log('1s后執(zhí)行')
return timeout(1000)
}).then(function(){
console.log('2s后執(zhí)行')
return timeout(1000)
}).then(function(){
console.log('3s后執(zhí)行')
})
Promise靜態(tài)方法Promise.all/race
Promise.all: 在所有的Promise異步操作完成之后胀滚,執(zhí)行某個(gè)任務(wù)就可以使用Promise.all
Promise.race: 在第一個(gè)Promise異步操作完成之后趟济,就執(zhí)行某個(gè)任務(wù)
示例代碼
function timeout(time){
return new Promise(function(resolve, reject){
setTimeout(function(){
console.log('某個(gè)異步操作完成')
resolve(Math.random())
},time)
})
}
var arr = [timeout(1000), timeout(3000), timeout(2000)]
Promise.all(arr).then(function(data){
console.log('所有操作完成',data)
})
Promise.race(arr).then(function(data){
console.log('第一個(gè)操作完成', data)
})