Promise:Promise.all、Promise.race、Promise.any的用法及区别
在項(xiàng)目開發(fā)過程中經(jīng)常需要通過異步編程來實(shí)現(xiàn)功能,此時(shí)就需要我們了解Promise.
Promise
Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案回調(diào)函數(shù)和事件更合理和更強(qiáng)大。
有了Promise對象,就可以將異步操作以同步操作的流程表達(dá)出來,避免了層層嵌套的回調(diào)函數(shù)。
一個(gè)Promise的當(dāng)前狀態(tài)必須為以下三種狀態(tài)中的一種:等待態(tài)(Pending)、執(zhí)行態(tài)(Fulfilled)和拒絕態(tài)(Rejected),狀態(tài)的改變只能是單向的,且變化后不可在改變。
一個(gè)Promise必須提供一個(gè) then 方法以訪問其當(dāng)前值、終值和據(jù)因。
promise.then(onFulfilled, onRejected)回調(diào)函數(shù)只能執(zhí)行一次,且返回 promise 對象
Promise的每個(gè)操作返回的都是Promise對象,可支持鏈?zhǔn)秸{(diào)用。
通過 then 方法執(zhí)行回調(diào)函數(shù),Promise的回調(diào)函數(shù)是放在事件循環(huán)中的微隊(duì)列。
Promise的具體用法如下:
function fn(){return new Promise((resolve, reject)=>{成功時(shí)調(diào)用 resolve(數(shù)據(jù))失敗時(shí)調(diào)用 reject(錯(cuò)誤)})}fn().then(success1, fail1).then(success2, fail2)Promise.all
Promise.all()方法用于將多個(gè) Promise 實(shí)例,包裝成一個(gè)新的 Promise 實(shí)例。
Promise.all()全部子實(shí)例都成功才算成功,有一個(gè)子實(shí)例失敗就算失敗。
Promise.all([promise1, promise2]).then(success1, fail1) promise1`和`promise2`都成功才會調(diào)用`success1Promise.race
Promise.race()方法也是將多個(gè) Promise 實(shí)例,包裝成一個(gè)新的 Promise 實(shí)例。
Promise.race()rece是賽跑機(jī)制,要看最先的promise子實(shí)例是成功還是失敗。
Promise.race([promise1, promise2]).then(success1, fail1) promise1`和`promise2`只要第一個(gè)成功就會調(diào)用`success1Promise.any
Promise.any()方法同樣是將多個(gè) Promise 實(shí)例,包裝成一個(gè)新的 Promise 實(shí)例。
Promise.any()有一個(gè)子實(shí)例成功就算成功,全部子實(shí)例失敗才算失敗。
Promise.race([promise1, promise2]).then(success1, fail1) promise1`和`promise2`只要有一個(gè)成功就會調(diào)用`success1總結(jié):Promise.all() 方法是 && 的關(guān)系;Promise.any() 方法是 || 的關(guān)系; Promise.race()方法是 賽跑機(jī)制 ;
總結(jié)
以上是生活随笔為你收集整理的Promise:Promise.all、Promise.race、Promise.any的用法及区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀镜怎么一直飞
- 下一篇: git reset之后找回本地未提交(未