精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Promise.allSettled 的作用,如何自己實(shí)現(xiàn)一個(gè) Promise.allSettled

開發(fā) 前端
只要其中任何一個(gè)promise 失敗都會(huì)執(zhí)行 reject ,并且 reject 的是第一個(gè)拋出的錯(cuò)誤信息,只有所有的 promise 都 resolve 時(shí)才會(huì)調(diào)用 .then 中的成功回調(diào)。

[[396102]]

本文轉(zhuǎn)載自微信公眾號(hào)「三分鐘學(xué)前端」,作者sisterAn。轉(zhuǎn)載本文請(qǐng)聯(lián)系三分鐘學(xué)前端公眾號(hào)。

引言

本文從四個(gè)方面循序漸進(jìn)介紹 Promise.allSettled :

  • Promise.all() 的缺陷
  • 引入 Promise.allSettled()
  • Promise.allSettled() 與 Promise.all() 各自的適用場(chǎng)景
  • 手寫 Promise.allSettled() 實(shí)現(xiàn)

下面正文開始??

Promise.all() 的缺陷

我們?cè)谥暗囊黄恼轮?面試官問:Promise.all 使用、原理實(shí)現(xiàn)及錯(cuò)誤處理 已經(jīng)介紹過,當(dāng)我們使用 Promise.all() 執(zhí)行過個(gè) promise 時(shí),只要其中任何一個(gè)promise 失敗都會(huì)執(zhí)行 reject ,并且 reject 的是第一個(gè)拋出的錯(cuò)誤信息,只有所有的 promise 都 resolve 時(shí)才會(huì)調(diào)用 .then 中的成功回調(diào)

  1. const p1 = Promise.resolve(1) 
  2. const p2 = Promise.resolve(2) 
  3. const p3 = new Promise((resolve, reject) => { 
  4.   setTimeout(reject, 1000, 'three'); 
  5. }); 
  6.  
  7. Promise.all([p1, p2, p3]) 
  8. .then(values => { 
  9.     console.log('resolve: 'values
  10. }).catch(err => { 
  11.     console.log('reject: ', err) 
  12. })  
  13.  
  14. // reject:  three 

注意:其中任意一個(gè) promise 被 reject ,Promise.all 就會(huì)立即被 reject ,數(shù)組中其它未執(zhí)行完的 promise 依然是在執(zhí)行的, Promise.all 沒有采取任何措施來取消它們的執(zhí)行

但大多數(shù)場(chǎng)景中,我們期望傳入的這組 promise 無論執(zhí)行失敗或成功,都能獲取每個(gè) promise 的執(zhí)行結(jié)果,為此,ES2020 引入了 Promise.allSettled()

Promise.allSettled()

Promise.allSettled() 可以獲取數(shù)組中每個(gè) promise 的結(jié)果,無論成功或失敗

  1. const p1 = Promise.resolve(1) 
  2. const p2 = Promise.resolve(2) 
  3. const p3 = new Promise((resolve, reject) => { 
  4.   setTimeout(reject, 1000, 'three'); 
  5. }); 
  6.  
  7. Promise.allSettled([p1, p2, p3]) 
  8. .then(values => { 
  9.     console.log(values
  10. })  
  11.  
  12. /* 
  13.   {status: "fulfilled", value: 1},  
  14.   {status: "fulfilled", value: 2},  
  15.   {status: "rejected", reason: "three"
  16. */ 

當(dāng)瀏覽器不支持 Promise.allSettled ,可以如此 polyfill:

  1. if (!Promise.allSettled) { 
  2.   const rejectHandler = reason => ({status: "rejected", reason}) 
  3.   const resolveHandler = value => ({status: "fulfilled", value}) 
  4.   Promise.allSettled = promises => 
  5.     Promise.all
  6.       promises.map((promise) => 
  7.         Promise.resolve(promise)  
  8.           .then(resolveHandler, rejectHandler) 
  9.       ) 
  10.       // 每個(gè) promise 需要用 Promise.resolve 包裹下 
  11.       // 以防傳遞非 promise 
  12.     ); 
  13.  
  14. // 使用 
  15. const p1 = Promise.resolve(1) 
  16. const p2 = Promise.resolve(2) 
  17. const p3 = new Promise((resolve, reject) => { 
  18.   setTimeout(reject, 1000, 'three'); 
  19. }) 
  20. const promises = [p1, p2, p3] 
  21. Promise.allSettled(promises).then(console.log) 

Promise.allSettled() 與 Promise.all() 各自的適用場(chǎng)景

Promise.allSettled() 更適合:

  • 彼此不依賴,其中任何一個(gè)被 reject ,對(duì)其它都沒有影響
  • 期望知道每個(gè) promise 的執(zhí)行結(jié)果

Promise.all() 更適合:

  • 彼此相互依賴,其中任何一個(gè)被 reject ,其它都失去了實(shí)際價(jià)值

手寫 Promise.allSettled 源碼

與 Promise.all 不同的是,當(dāng) promise 被 reject 之后,我們不會(huì)直接 reject ,而是記錄下該 reject 的值和對(duì)應(yīng)的狀態(tài) 'rejected' ;

同樣地,當(dāng) promise 對(duì)象被 resolve 時(shí)我們也不僅僅局限于記錄值,同時(shí)也會(huì)記錄狀態(tài) 'fulfilled' 。

當(dāng)所有的 promise 對(duì)象都已執(zhí)行(解決或拒絕),我們統(tǒng)一 resolve 所有的 promise 執(zhí)行結(jié)果數(shù)組

  1. MyPromise.allSettled = function (promises) { 
  2.     return new MyPromise((resolve, reject) => { 
  3.       promises = Array.isArray(promises) ? promises : [] 
  4.       let len = promises.length 
  5.       const argslen = len 
  6.       // 如果傳入的是一個(gè)空數(shù)組,那么就直接返回一個(gè)resolved的空數(shù)組promise對(duì)象 
  7.       if (len === 0) return resolve([]) 
  8.       // 將傳入的參數(shù)轉(zhuǎn)化為數(shù)組,賦給args變量 
  9.       let args = Array.prototype.slice.call(promises) 
  10.       // 計(jì)算當(dāng)前是否所有的 promise 執(zhí)行完成,執(zhí)行完畢則resolve 
  11.       const compute = () => { 
  12.         if(--len === 0) {  
  13.           resolve(args) 
  14.         } 
  15.       } 
  16.       function resolvePromise(index, value) { 
  17.         // 判斷傳入的是否是 promise 類型 
  18.         if(value instanceof MyPromise) {  
  19.           const then = value.then 
  20.           then.call(value, function(val) { 
  21.             args[index] = { status: 'fulfilled', value: val} 
  22.             compute() 
  23.           }, function(e) { 
  24.             args[index] = { status: 'rejected', reason: e } 
  25.             compute() 
  26.           }) 
  27.         } else { 
  28.           args[index] = { status: 'fulfilled', value: value} 
  29.           compute() 
  30.         } 
  31.       } 
  32.     
  33.       for(let i = 0; i < argslen; i++){ 
  34.         resolvePromise(i, args[i]) 
  35.       } 
  36.     }) 
  37.   } 

總結(jié)

彼此相互依賴,一個(gè)失敗全部失效(全無或全有)用 Promise.all ;相互獨(dú)立,獲取每個(gè)結(jié)果用 Promise.allSettled

來自:https://github.com/sisterAn/blog

 

責(zé)任編輯:武曉燕 來源: 三分鐘學(xué)前端
相關(guān)推薦

2024-08-27 09:16:15

接口代碼狀態(tài)

2025-10-15 03:00:00

JavaScript工具并發(fā)

2023-10-04 07:25:59

JavaScriptpromises

2025-05-08 08:35:00

異步編程JavaScriptAPI

2025-01-22 08:29:36

AsyncJavaScript異步

2021-04-28 08:21:21

Promise.any服務(wù)器場(chǎng)景

2025-08-28 10:00:00

APIJavaScrip開發(fā)

2025-04-23 09:47:57

開發(fā)場(chǎng)景請(qǐng)求

2023-07-11 09:07:49

數(shù)組Promise方法

2025-11-07 01:45:00

PromiseAPI并發(fā)

2021-04-29 08:28:24

架構(gòu)參數(shù)傳遞

2020-09-24 11:46:03

Promise

2025-06-13 09:40:45

2024-05-20 01:10:00

Promise變量

2018-03-13 16:04:45

Promise執(zhí)行順序

2018-07-03 15:20:36

Promise函數(shù)借錢

2020-12-15 08:01:24

Promise參數(shù)ES6

2023-09-15 15:31:23

異步編程Promise

2025-07-11 08:09:07

Node.jsAPI權(quán)限

2017-05-11 20:20:59

JavascriptPromiseWeb
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲精华一区二区三区| av中文在线资源库| 韩国av一区二区| 欧美噜噜久久久xxx| 国产av一区二区三区传媒| 国模私拍视频在线播放| 久久一夜天堂av一区二区三区| 日韩美女主播视频| www.97视频| 欧美五码在线| 欧美日韩大陆一区二区| 免费人成自慰网站| 成人在线免费电影| 粉嫩嫩av羞羞动漫久久久| 日本成人在线视频网址| 国产波霸爆乳一区二区| 五月天亚洲一区| 欧美色倩网站大全免费| 日韩在线观看a| www 日韩| 成人激情视频网站| 国产区亚洲区欧美区| 日本免费在线播放| 91青青国产在线观看精品| 欧美精品一区二区三区在线播放| 女人另类性混交zo| 欧美野外wwwxxx| 国产精品久久久久久久久免费桃花 | 毛片久久久久久| 国产精品xxxav免费视频| 91国产精品成人| 成人免费性视频| 麻豆av在线免费看| 国产日产精品1区| 成人自拍网站| 国产人妖一区二区| 美国av一区二区| 国产成人精品视频| 免费网站看av| 9191国语精品高清在线| 亚洲视频专区在线| 免费中文字幕av| 成人爽a毛片| 欧美一区二区三区人| www.99av.com| 欧美日韩成人影院| 欧美日韩国产精品| 国产原创中文在线观看| 天堂8中文在线| 亚洲黄一区二区三区| 国产免费色视频| 欧美精品hd| 亚洲欧洲成人精品av97| 婷婷五月色综合| 国产日产精品久久久久久婷婷| 91丨porny丨国产入口| 国产高清一区视频| 国产 日韩 欧美 综合| 国产99精品视频| 99视频国产精品免费观看| 国产视频第一页| 国产电影一区在线| 97se视频在线观看| 亚洲av永久无码国产精品久久 | 91激情视频在线观看| 亚洲精品亚洲人成在线| 亚洲欧美国产精品| 午夜精产品一区二区在线观看的| 亚洲系列另类av| 一二美女精品欧洲| 自拍偷拍第9页| 欧美xxx在线观看| 欧美激情xxxx性bbbb| 久久久国产精华液| 亚洲精品婷婷| 国产成人福利网站| 中文字幕一区二区三区人妻四季| 久久激情五月婷婷| 91成人免费视频| 日韩一区免费视频| 久久影院午夜论| 亚洲人成网站在线观看播放| 麻豆免费在线观看| 亚洲综合成人网| 国产亚洲综合视频| 成人高清一区| 日韩一级二级三级精品视频| 亚洲av网址在线| 欧美色女视频| 欧美成人精品xxx| 日本熟妇一区二区| 日本伊人精品一区二区三区观看方式| 国产美女久久精品香蕉69| 成 人片 黄 色 大 片| 91在线视频播放地址| 色女孩综合网| 欧美男男video| 色94色欧美sute亚洲13| 一本之道在线视频| 免费电影一区二区三区| 久久综合电影一区| 啦啦啦免费高清视频在线观看| 男人的j进女人的j一区| 国产精品视频一区二区三区经| 国产最新视频在线| 伊人一区二区三区| 亚洲黄色av网址| 精品久久97| 久久精视频免费在线久久完整在线看| 日本一区二区不卡在线| 久久69国产一区二区蜜臀| 国产精品一码二码三码在线| 日本亚洲精品| 疯狂蹂躏欧美一区二区精品| 黄色免费网址大全| 狠狠久久伊人| 欧美成人国产va精品日本一级| 日韩欧美国产另类| youjizz国产精品| 免费成人深夜夜行网站视频| 97久久香蕉国产线看观看| 欧美草草影院在线视频| www.4hu95.com四虎| 亚洲精品乱码| 99re在线播放| 黄网页在线观看| 在线免费观看日本欧美| 久久人人妻人人人人妻性色av| 亚洲激情中文在线| 国产欧美韩国高清| 国产香蕉在线| 欧美日韩在线视频一区二区| 成年女人免费视频| 欧美 日韩 国产精品免费观看| 国产美女精品免费电影| jizz在线观看中文| 色呦呦国产精品| 性久久久久久久久久| 亚洲精品字幕| 国产一区免费视频| 成人免费一区二区三区牛牛| 日韩视频中午一区| 亚洲伦理一区二区三区| 久久99久久99| 伊人久久av导航| 美女色狠狠久久| 中文字幕亚洲综合久久筱田步美 | 先锋影音在线资源站91| 91超碰这里只有精品国产| 刘亦菲国产毛片bd| 裸体一区二区三区| 亚洲欧美成人一区| 欧美性生活一级| 日韩在线一区二区三区免费视频| 中国精品一区二区| 中文字幕日本乱码精品影院| 中文字幕第17页| 亚洲国产精品久久久久蝴蝶传媒| 91精品视频免费观看| 久草资源在线观看| 日韩一区二区电影| 国产在线视频你懂的| 波多野结衣一区二区三区| 国产av人人夜夜澡人人爽麻豆| 国产精品超碰| 欧洲成人性视频| 国产精品久久久久久久龚玥菲| 欧美在线三级电影| 亚洲色偷偷综合亚洲av伊人| 国产麻豆视频一区二区| 日本阿v视频在线观看| 福利在线一区| 日产日韩在线亚洲欧美| av黄色在线观看| 欧美一二三区在线观看| 久久久一区二区三区四区| av一区二区不卡| 日韩一级片播放| 婷婷综合激情| 国产一区二区久久久| 成人在线爆射| 精品国产拍在线观看| 亚洲精品字幕在线观看| 色婷婷综合久久| 国产精品丝袜一区二区| 99久久婷婷国产综合精品电影| 精品久久久久久无码国产| 99热国内精品| 精选一区二区三区四区五区| 欧美xxxx网站| 国色天香2019中文字幕在线观看| 久草在线青青草| 日韩欧美视频在线| 天堂网免费视频| 亚洲精品国产a| 在线观看福利片| 国产在线精品一区二区三区不卡| 亚洲熟妇无码一区二区三区| 久久精品高清| 韩国一区二区三区美女美女秀| 国产精品无码久久久久| 91精品国产高清自在线| 日韩精品毛片| 日韩精品丝袜在线| 国产一区二区三区中文字幕| 欧美性猛交xxxxx水多| 成人免费毛片xxx| 久久人人超碰精品| 少妇伦子伦精品无吗| 奇米一区二区三区av| 国产精品国产亚洲精品看不卡| 888久久久| 亚洲成色www久久网站| 老汉色老汉首页av亚洲| 91欧美激情另类亚洲| 日日夜夜天天综合| 午夜精品久久久久久久99热 | 亚洲精品欧美在线| 懂色av粉嫩av浪潮av| 91女厕偷拍女厕偷拍高清| 天堂va欧美va亚洲va老司机| 美国三级日本三级久久99| 中文字幕无码不卡免费视频| 亚洲福利久久| 国产欧美精品aaaaaa片| 亚洲欧美日韩高清在线| 午夜一区二区三区| 亚洲自拍都市欧美小说| 久久av一区二区三区亚洲| 亚洲精品一区在线| 92国产精品久久久久首页 | 欧美日韩亚洲国产综合| caoporn国产| 精品久久中文字幕| 国产精品99无码一区二区| 亚洲三级在线免费观看| 亚洲国产精品一区二区久久hs| 国产偷v国产偷v亚洲高清| 韩国无码一区二区三区精品| www.在线成人| 亚洲av无码一区二区三区观看| 成人免费看黄yyy456| 伊人av在线播放| 国产一区欧美二区| 久久6免费视频| 九色综合狠狠综合久久| 日韩高清在线一区二区| 国产真实乱偷精品视频免| 国产免费中文字幕| 狠狠狠色丁香婷婷综合久久五月| 日韩av片专区| 国产一区二区调教| 男插女视频网站| 成人手机在线视频| 一级黄色片毛片| a级高清视频欧美日韩| 国产精品扒开腿做爽爽爽a片唱戏| 成人黄色一级视频| 久久一区二区电影| 久久综合色8888| 一级片久久久久| ...xxx性欧美| 国产一级视频在线播放| 婷婷中文字幕一区三区| 美日韩一二三区| 欧美视频精品在线观看| 97人妻一区二区精品免费视频| 日韩女优视频免费观看| 色欲久久久天天天综合网| 精品爽片免费看久久| 国内av一区二区三区| 久久精品成人动漫| 欧美xxxx性xxxxx高清| 38少妇精品导航| 欧美aaa视频| 99热国产免费| 国产成人精品999在线观看| 一区二区三区国产福利| 欧美三级网页| 国产日产欧美视频| 久久精品国产77777蜜臀| 人妻 丝袜美腿 中文字幕| wwwwww.欧美系列| 欧美视频一区二区在线| 亚洲一二三区在线观看| 国产美女www| 日韩欧美电影一二三| 国产视频二区在线观看| 久久精品影视伊人网| 蜜桃麻豆影像在线观看| 国产日韩中文字幕| 久久久久观看| 中文字幕一区综合| aa亚洲婷婷| 天堂av在线8| 91一区一区三区| 我要看黄色一级片| 一本色道久久综合亚洲91| 国产黄色一区二区| 一区二区三区高清国产| 免费在线中文字幕| 国产精品久久久久久久久久久不卡| 日韩欧美久久| 一本色道久久综合亚洲二区三区| 樱桃成人精品视频在线播放| 在线观看免费视频高清游戏推荐| 成人激情免费电影网址| 午夜精品福利在线视频| 色偷偷88欧美精品久久久| 亚洲男人第一天堂| 精品国产美女在线| 欧美日韩精品免费观看视欧美高清免费大片 | 国产精品成人国产乱| 欧美日韩久久久久久| 男人天堂资源在线| 久久久亚洲影院| 精品久久国产一区| 亚欧精品在线| 天堂久久一区二区三区| av av在线| 一区二区三区在线视频免费| 一级片在线观看视频| 亚洲性xxxx| 伊人色综合一区二区三区影院视频| 99中文视频在线| 在线中文一区| 一区二区三区欧美精品| 日本一区二区三区dvd视频在线| 国产午夜性春猛交ⅹxxx| 欧美va日韩va| 丝袜美腿av在线| 成人a在线观看| 99久久精品国产亚洲精品| 中文字幕永久视频| 国产亚洲一区二区三区四区 | 另类av一区二区| 熟妇人妻久久中文字幕| 亚洲地区一二三色| 性猛交富婆╳xxx乱大交天津| 伦理中文字幕亚洲| 精品麻豆剧传媒av国产九九九| 亚洲欧洲一区二区在线观看| 免费成人av资源网| 国产性猛交xx乱| 欧美日韩国产乱码电影| 一区二区三区视频在线观看视频| 国产精品久久99久久| 欧美三级伦理在线| 天天干天天操天天玩| 国产精品麻豆一区二区| 亚洲午夜激情视频| 久久精品久久久久久| 国产精品一区二区美女视频免费看 | 三级做a全过程在线观看| 91av国产在线| 免费观看久久av| 牛夜精品久久久久久久| 国产精品成人网| 国产a级免费视频| 久久久久久久久爱| 日韩成人午夜| 污污视频网站免费观看| 欧美国产一区在线| 91女人18毛片水多国产| 欧美xxxx做受欧美| 猫咪成人在线观看| 国产一区视频免费观看| 国产精品美女久久久久久| 国产日本精品视频| 国产+人+亚洲| 国产免费av一区二区三区| 99re精彩视频| 亚洲一区二区三区四区五区黄 | xxxxx成人.com| 136国产福利精品导航网址应用| 免费人成自慰网站| 国产色婷婷亚洲99精品小说| 97人妻精品一区二区三区软件| 欧美精品videos性欧美| 欧美亚洲大陆| www.色欧美| 精品成人在线视频| 9191在线观看| 国产九区一区在线| 奇米在线7777在线精品 | 欧美激情偷拍| 亚洲欧美视频在线播放| 欧美精品在线一区二区三区| 超清av在线| 亚洲国产精品日韩| 成人动漫一区二区| 在线免费看av片| 97精品视频在线| 日韩在线视屏| 97人妻精品一区二区三区免 | 午夜天堂影视香蕉久久| 成人在线观看一区| 国产精品一区二区三区不卡| 美国毛片一区二区三区| 日韩久久中文字幕|