在項目開發過程中經常需要通過異步程式設計來實作功能,此時就需要我們了解
Promise
.
Promise
Promise
Promise
是異步程式設計的一種解決方案,比傳統的解決方案回調函數和事件更合理和更強大。
有了
Promise
對象,就可以将異步操作以同步操作的流程表達出來,避免了層層嵌套的回調函數。
一個
Promise
的目前狀态必須為以下三種狀态中的一種:等待态(
Pending
)、執行态(
Fulfilled
)和拒絕态(
Rejected
),狀态的改變隻能是單向的,且變化後不可在改變。
一個
Promise
必須提供一個
then
方法以通路其目前值、終值和據因。
promise.then(onFulfilled, onRejected)
回調函數隻能執行一次,且傳回
promise
對象
Promise
的每個操作傳回的都是
Promise
對象,可支援鍊式調用。
通過
then
方法執行回調函數,
Promise
的回調函數是放在事件循環中的微隊列。
Promise
的具體用法如下:
function fn(){
return new Promise((resolve, reject)=>{
成功時調用 resolve(資料)
失敗時調用 reject(錯誤)
})
}
fn().then(success1, fail1).then(success2, fail2)
Promise.all
Promise.all
Promise.all()
方法用于将多個
Promise
執行個體,包裝成一個新的
Promise
執行個體。
Promise.all()
全部子執行個體都成功才算成功,有一個子執行個體失敗就算失敗。
Promise.all([promise1, promise2]).then(success1, fail1)
promise1`和`promise2`都成功才會調用`success1
Promise.race
Promise.race
Promise.race()
方法也是将多個
Promise
執行個體,包裝成一個新的
Promise
執行個體。
Promise.race()
rece是賽跑機制,要看最先的promise子執行個體是成功還是失敗。
Promise.race([promise1, promise2]).then(success1, fail1)
promise1`和`promise2`隻要第一個成功就會調用`success1
Promise.any
Promise.any
Promise.any()
方法同樣是将多個
Promise
執行個體,包裝成一個新的
Promise
執行個體。
Promise.any()
有一個子執行個體成功就算成功,全部子執行個體失敗才算失敗。
Promise.race([promise1, promise2]).then(success1, fail1)
promise1`和`promise2`隻要有一個成功就會調用`success1
總結:方法是
Promise.all()
的關系;
&&
方法是
Promise.any()
的關系;
||
方法是
Promise.race()
;
賽跑機制