<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          了解 Promise.any() 用法

          共 1389字,需瀏覽 3分鐘

           ·

          2021-08-22 09:29


          2021 年 6 月發(fā)布 ES2021 標(biāo)準(zhǔn)。ES2021 引入了 Promise.any() 方法。該方法接受一組 Promise 實(shí)例作為參數(shù),包裝成一個(gè)新的 Promise 實(shí)例返回。


          const p = Promise.any([p1, p2, p3]);


          只要參數(shù)實(shí)例有一個(gè)變成 fulfilled 狀態(tài),包裝實(shí)例就會(huì)變成 fulfilled 狀態(tài);如果所有參數(shù)實(shí)例都變成rejected狀態(tài),包裝實(shí)例就會(huì)變成rejected狀態(tài)。


          Promise.any() 跟 Promise.race() 方法很像,只有一點(diǎn)不同。


          const p = Promise.race([p1, p2, p3]);


          上面代碼中,只要 p1、p2、p3 之中有一個(gè)實(shí)例率先改變狀態(tài),p的狀態(tài)就跟著改變。那個(gè)率先改變的 Promise 實(shí)例的返回值,就傳遞給 p 的回調(diào)函數(shù)。


          Promise.any() 必須等到所有參數(shù) p1、p2、p3 變成 rejected 狀態(tài)才會(huì)結(jié)束。


          const promises = [  fetch('/endpoint-a').then(() => 'a'),  fetch('/endpoint-b').then(() => 'b'),  fetch('/endpoint-c').then(() => 'c'),];
          try { const first = await Promise.any(promises); console.log(first);} catch (error) { console.log(error);}


          上面代碼中,Promise.any() 方法的參數(shù)數(shù)組包含三個(gè) Promise 操作。其中只要有一個(gè)變成fulfilled,Promise.any() 返回的 Promise 對(duì)象就變成 fulfilled。如果所有三個(gè)操作都變成rejected,那么 await 命令就會(huì)拋出錯(cuò)誤。


          Promise.any() 拋出的錯(cuò)誤,不是一個(gè)一般的 Error 錯(cuò)誤對(duì)象,而是一個(gè) AggregateError 實(shí)例。它相當(dāng)于一個(gè)數(shù)組,每個(gè)成員對(duì)應(yīng)一個(gè)被 rejected 的操作所拋出的錯(cuò)誤。下面是 AggregateError 的實(shí)現(xiàn)示例。


          // new AggregateError() extends Array
          const err = new AggregateError();err.push(new Error("first error"));err.push(new Error("second error"));// ...throw err;


          Promise.all() 方法只適合所有異步操作都成功的情況,如果有一個(gè)操作失敗,就無(wú)法滿足要求。



          ES2020 引入了Promise.allSettled() 方法,用來(lái)確定一組異步操作是否都結(jié)束了(不管成功或失?。K?,它的名字叫做”Settled“,包含了”fulfilled“和”rejected“兩種情況。


          瀏覽 47
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91三级电影 | 欧美内射在线 | 六月婷婷在线 | 国产免费黄色网址 | 亚洲无码一卡 |