<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>

          【每日一題NO.53】手寫Promise.allSettled

          共 1928字,需瀏覽 4分鐘

           ·

          2021-10-12 11:56

          人生苦短,總需要一點(diǎn)儀式感。比如學(xué)前端~

          Promise.allSettled MDN

          概念

          • Promise.allSettled()方法接收一組 Promise 實(shí)例作為參數(shù),返回一個(gè)新的 Promise 實(shí)例
          • 只有等到所有的這些參數(shù)實(shí)例都返回結(jié)果,不管是 fulfilled 還是 rejected,包裝實(shí)例才會(huì)結(jié)束
          • 返回新的 Promise 實(shí)例,一旦結(jié)束,狀態(tài)總是 fulfilled,不會(huì)變成 rejected
          • 新的 promise 實(shí)例給監(jiān)聽函數(shù)傳遞一個(gè)數(shù)組 results。該數(shù)組的每個(gè)成員都是一個(gè)對象,對應(yīng)傳入Promise.allSettled的Promise實(shí)例。每個(gè)對象都有status屬性,對應(yīng)著fulfilled和rejected。fulfilled時(shí),對象有value屬性,rejected時(shí)有reason屬性,對應(yīng)兩種狀態(tài)的返回值

          有時(shí)候我們不關(guān)心異步操作的結(jié)果,只會(huì)關(guān)心這些操作有沒有結(jié)束的時(shí)候,這時(shí)候比較適用Promise.allSettled()

          使用

          const?resolved?=?Promise.resolve(42);
          const?rejected?=?Promise.reject(-1);

          const?allSettledPromise?=?Promise.allSettled([resolved,?rejected]);

          allSettledPromise.then(function?(results)?{
          ??console.log(results);
          });
          //?[
          //????{?status:?'fulfilled',?value:?42?},
          //????{?status:?'rejected',?reason:?-1?}
          //?]

          簡單實(shí)現(xiàn)

          const?formatSettledResult?=?(success,?value)?=>
          ??success
          ??????{?status:?"fulfilled",?value?}
          ????:?{?status:?"rejected",?reason:?value?};

          Promise.all_settled?=?function?(iterators)?{
          ??const?promises?=?Array.from(iterators);
          ??const?num?=?promises.length;
          ??const?resultList?=?new?Array(num);
          ??let?resultNum?=?0;

          ??return?new?Promise((resolve)?=>?{
          ????promises.forEach((promise,?index)?=>?{
          ??????Promise.resolve(promise)
          ????????.then((value)?=>?{
          ??????????resultList[index]?=?formatSettledResult(true,?value);
          ??????????if?(++resultNum?===?num)?{
          ????????????resolve(resultList);
          ??????????}
          ????????})
          ????????.catch((error)?=>?{
          ??????????resultList[index]?=?formatSettledResult(false,?error);
          ??????????if?(++resultNum?===?num)?{
          ????????????resolve(resultList);
          ??????????}
          ????????});
          ????});
          ??});
          };

          //?測試
          const?resolved?=?Promise.resolve(42);
          const?rejected?=?Promise.reject(-1);
          Promise.all_settled([resolved,?rejected]).then((results)?=>?{
          ??console.log(results);
          });


          所有《每日一題》的 知識(shí)大綱索引腦圖 整理在此:https://www.yuque.com/dfe_evernote/interview/everyday
          你也可以點(diǎn)擊文末的 “閱讀原文” 快速跳轉(zhuǎn)


          END
          愿你歷盡千帆,歸來仍是少年。
          瀏覽 54
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  青青成人网 | 色姑娘大香蕉 | 国产黄色自拍 | 美女性爱网站 | 青草色天堂 |