摘要:的幾個擴展總結描述和相反,當所有的被拒絕之后,方法執行完成的決議,如果存在一個執行完成的決議,方法則執行拒絕里邊的所有實例反過來就好了執行到此執行到此描述忽略被拒絕的,只需要有一個完成的,方法就執行完成操作,如果全部的都被拒絕,方法執行拒絕
Promise的幾個擴展API總結 1. Promise.none 描述:
和 Promise.all 相反,當所有的promise被拒絕之后,none方法執行完成的決議,如果存在一個promise執行完成的決議,none方法則執行拒絕
code:Promise.none = function(promises) { return Promise.all(promises.map(promise => { return new Promise((resolve, reject) => { // Promise.all里邊的所有promise實例反過來就好了 return Promise.resolve(promise).then(reject, resolve) }) })) }
const promisesForNoneTest1= [ Promise.reject("1"), Promise.reject("2"), Promise.resolve("3"), Promise.reject("4"), ] Promise.none(promisesForNoneTest1).then(res => { debugger }, res => { debugger // 執行到此 }) const promisesForNoneTest2= [ Promise.reject("1"), Promise.reject("2"), Promise.reject("3"), Promise.reject("4"), ] Promise.none(promisesForNoneTest2).then(res => { debugger // 執行到此 }, res => { debugger })2. Promise.any 描述:
忽略被拒絕的promise,只需要有一個完成的promise,any方法就執行完成操作,如果全部的promise都被拒絕,any方法執行拒絕操作
code:Promise.any = function(promises) { const result = [] return Promise.all(promises.map(promise => { // 控制Promise.all處理的所有的promise都執行reslove決議 return Promise.resolve(promise).then(res => { // 但是只記錄實際上決議為resolve的結果值 result.push(res) }, () => { // 防止穿透,這里可以進行拒絕信息的返回 }) })).then(() => { return new Promise((resolve, reject) => { if (result.length > 0) resolve(result) else reject(result) }) }) }
const promisesForAnyTest1= [ Promise.reject("1"), Promise.resolve("2"), Promise.reject("3"), Promise.resolve("4"), Promise.resolve("5"), ] Promise.any(promisesForAnyTest1).then(res => { debugger // 執行到此,res 為 ["2", "4", "5"] }, res => { debugger }) const promisesForAnyTest2= [ Promise.reject("1"), Promise.reject("2"), Promise.reject("3"), Promise.reject("4"), Promise.reject("5"), ] Promise.any(promisesForAnyTest2).then(res => { debugger }, res => { debugger // 執行到此 })3. Promise.first 描述:
類似race,但是只要有一個promise決議為完成(忽略前邊被拒絕的promise),就忽略后邊的promise
code:Promise.first = function(promises) { return new Promise((resolve, reject) => { let rejectNum = 0 promises.forEach(promise => { // 如果當前 promise 決議為reslove,那就直接執行"根promise"的resolve // 否則去記錄到拒絕的promise中,然后判斷全部的promise拒絕了,執行"根promise"的reject Promise.resolve(promise).then(resolve, () => { if (++rejectNum === promises.length) { // 這里可以控制reject返回的信息 reject() } }) }) }) }
const promisesForFirstTest1= [ Promise.reject("1"), Promise.resolve("2"), Promise.reject("3"), Promise.resolve("4"), ] Promise.first(promisesForFirstTest1).then(res => { debugger // 執行到此,res 為 "2" }, res => { debugger }) const promisesForFirstTest2= [ Promise.reject("1"), Promise.resolve("2"), Promise.reject("3"), Promise.resolve("4"), ] Promise.first(promisesForFirstTest2).then(res => { debugger }, res => { debugger // 執行到此 })4. Promise.map 描述:
在第二個方法 any 中,用到了Promise.all的方法,里邊使用Array.prototype.map方法處理了所有的的promise,當前這個Promise.map方法則希望把他倆弄到一起
Promise.map方法希望實現一個處理批量異步操作的并行迭代方法,本質上是利用Promise.all進行二次封裝
code:Promise.map = function(promises, resolveCallback, rejectCallback) { return Promise.all(promises.map(promise => { return Promise.resolve(promise).then(result => { return resolveCallback(result) }, error => { return Promise.reject(rejectCallback(error)) }) })) }
const promisesForMapTest1= [ Promise.resolve("1"), Promise.resolve("2"), Promise.resolve("3"), Promise.resolve("4"), ] Promise.map(promisesForMapTest1, result => { return result * 100 }, result => { return result }).then(res => { debugger // 執行到此,res為 [100, 200, 300, 400] }, res => { debugger }) const promisesForMapTest2= [ Promise.resolve("1"), Promise.resolve("2"), Promise.reject("3"), Promise.resolve("4"), ] Promise.map(promisesForMapTest2, result => { return result * 100 }, result => { return result }).then(res => { debugger }, res => { debugger // 執行到此,res為 "3" })
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101617.html
摘要:寫在前面金三銀四又到了一年一度的跳槽季相信大家都在準備自己面試筆記我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結方便自己復習詳細內容會在之后一一對應地補充上去有些在我的個人主頁筆記中也有相關記錄這里暫且放一個我的面試知識點目錄大家 寫在前面: 金三銀四, 又到了一年一度的跳槽季, 相信大家都在準備自己面試筆記, 我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結,方便自...
摘要:寫在前面金三銀四又到了一年一度的跳槽季相信大家都在準備自己面試筆記我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結方便自己復習詳細內容會在之后一一對應地補充上去有些在我的個人主頁筆記中也有相關記錄這里暫且放一個我的面試知識點目錄大家 寫在前面: 金三銀四, 又到了一年一度的跳槽季, 相信大家都在準備自己面試筆記, 我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結,方便自...
閱讀 3322·2021-11-25 09:43
閱讀 1309·2021-11-23 09:51
閱讀 3613·2021-10-11 11:06
閱讀 3705·2021-08-31 09:41
閱讀 3602·2019-08-30 15:53
閱讀 3512·2019-08-30 15:53
閱讀 970·2019-08-30 15:43
閱讀 3311·2019-08-29 14:02