天天看點

Promise:Promise.all、Promise.race、Promise.any的用法及差別

在項目開發過程中經常需要通過異步程式設計來實作功能,此時就需要我們了解

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

執行個體,包裝成一個新的

Promise

執行個體。

Promise.all()

全部子執行個體都成功才算成功,有一個子執行個體失敗就算失敗。

Promise.all([promise1, promise2]).then(success1, fail1)
promise1`和`promise2`都成功才會調用`success1
           

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

執行個體,包裝成一個新的

Promise

執行個體。

Promise.any()

有一個子執行個體成功就算成功,全部子執行個體失敗才算失敗。

Promise.race([promise1, promise2]).then(success1, fail1)
promise1`和`promise2`隻要有一個成功就會調用`success1
           
總結:

Promise.all()

方法是

&&

的關系;

Promise.any()

方法是

||

的關系;

Promise.race()

方法是

賽跑機制

繼續閱讀