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

          【每日一題】在 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í)行完之前展開(kāi),都是pending狀態(tài);執(zhí)行完畢后展開(kāi),都是fulfilled狀態(tài))

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

          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
          愿你歷盡千帆,歸來(lái)仍是少年。


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

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

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

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

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

          ● 工作中常見(jià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)
          <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>
                  操操操操操操操 | 国产淫秽视频免费 | 全球亚洲精品视频 | 特一级黄片 | 北条麻妃中文字幕黄色片子 |