日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Promise的几个扩展API总结

發布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Promise的几个扩展API总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 = 0promises.forEach(promise => {// 如果當前 promise 決議為reslove,那就直接執行"根promise"的resolve// 否則去記錄到拒絕的promise中,然后判斷全部的promise拒絕了,執行"根promise"的rejectPromise.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"})

總結

以上是生活随笔為你收集整理的Promise的几个扩展API总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。