1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【每日一題】在 map 中和 for 中調(diào)用異步函數(shù)的區(qū)別

        共 2076字,需瀏覽 5分鐘

         ·

        2021-08-28 13:02

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

        區(qū)別

        map 會(huì)先執(zhí)行同步操作執(zhí)行完并返回,之后再一次一次執(zhí)行異步任務(wù);

        for等待異步返回結(jié)果,之后再進(jìn)入下一次循環(huán)。

        測(cè)試

        公共代碼

        const arr = [12345];
        function getData({
          return new Promise((resolve, reject) => {
            setTimeout(() => {
              resolve("data");
            }, 1000);
          });
        }

        map 表現(xiàn)

        (async () => {
          const result = arr.map(async () => {
            console.log("start");
            const data = await getData();
            console.log(data);
            return data;
          });
          console.log(result);
        })();

        /* 先一次性打印下邊這兩行*/
        // 5 start -> 遍歷每一項(xiàng),打印start
        // (5)[Promise, Promise, Promise, Promise, Promise] -> 返回的結(jié)果(在未執(zhí)行完之前展開,都是pending狀態(tài);執(zhí)行完畢后展開,都是fulfilled狀態(tài))

        /* 待結(jié)果完畢后,一次性打印await后內(nèi)容*/
        // 5 data -> 遍歷每一項(xiàng)異步執(zhí)行返回的結(jié)果
        打印結(jié)果
        promise狀態(tài)觀察

        map 函數(shù)的原理小總結(jié):

        1. 循環(huán)數(shù)組,把數(shù)組每一項(xiàng)的值傳給回調(diào)函數(shù)
        2. 將回調(diào)函數(shù)處理后的結(jié)果 push 到一個(gè)新的數(shù)組
        3. 返回新的數(shù)組

        map 函數(shù)都是同步執(zhí)行的,循環(huán)每一項(xiàng)的時(shí)候,到給新數(shù)值都是同步操作

        代碼執(zhí)行結(jié)果:

        map 不會(huì)等到回調(diào)函數(shù)的異步函數(shù)返回結(jié)果,就會(huì)進(jìn)入下一次循環(huán)。執(zhí)行完同步操作之后返回結(jié)果,所以 map 返回的值都是 promise。

        for 表現(xiàn)

        (async () => {
          for (let i = 0, len = arr.length; i < len; i++) {
            console.log(i);
            const data = await getData();
            console.log(data);
          }
        })();

        // 0
        // data
        // 1
        // data
        // 2
        // data
        // 3
        // data
        // 4
        // data
        打印結(jié)果

        END
        愿你歷盡千帆,歸來仍是少年。


        讓我們一起攜手同走前端路!

        關(guān)注公眾號(hào)回復(fù)【加群】

        ● 工作中常見頁(yè)面布局的n種實(shí)現(xiàn)方法

        ● 三欄響應(yīng)式布局(左右固寬中間自適應(yīng))的5種方法

        ● 兩欄自適應(yīng)布局的n種實(shí)現(xiàn)方法匯總

        ● 工作中常見的兩欄布局案例及分析

        ● 垂直居中布局的一百種實(shí)現(xiàn)方式

        ● 常用九宮格布局的幾大方法匯總

        ● 為什么操作DOM會(huì)影響WEB應(yīng)用的性能?

        ● 移動(dòng)端滾動(dòng)穿透的6種解決方案

        ● Vue + TypeScript 踩坑總結(jié)

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日韩欧美一卡二卡三卡四卡无卡 | 五月天婷婷激情网 | 干干网 | 77777成人综合网站 | 777色综合 | 网红美女被到爽视频网站 | 国内体内she精视频免费 | 嗯∽啊~轻点禁视频漫画 | 日日干日日爽 | 无码孕妇孕交在线观看 |