国产性猛交xx乱_性色国产成人久久久精品_亚洲成年人av_亚洲av片不卡无码久久_日本精品一二三_久久免费精品国产_欧美成人精品一区二区综合免费_无码人妻丰满熟妇区毛片蜜桃精品_四虎永久免费影院_国产一区二区三区四区在线

Promise 你真的用明白了么?

2020-9-2    seo達人

前置知識

在開始正文前,我們先把本文涉及到的一些內容提前定個基調。

Promise 哪些 API 涉及了微任務?

Promise 中只有涉及到狀態變更后才需要被執行的回調才算是微任務,比如說 then、 catch 、finally ,其他所有的代碼執行都是宏任務(同步執行)。

上圖中藍色為同步執行,黃色為異步執行(丟到微任務隊列中)。

這些微任務何時被加入微任務隊列?

這個問題我們根據 ecma 規范來看:

  • 如果此時 Promise 狀態為 pending,那么成功或失敗的回調會分別被加入至 [[PromiseFulfillReactions]] 和 [[PromiseRejectReactions]] 中。如果你看過手寫 Promise 的代碼的話,應該能發現有兩個數組存儲這些回調函數。
  • 如果此時 Promise 狀態為非 pending 時,回調會成為 Promise Jobs,也就是微任務。

了解完以上知識后,正片開始。

同一個 then,不同的微任務執行

初級

Promise.resolve()
  .then(() => { console.log("then1"); Promise.resolve().then(() => { console.log("then1-1");
    });
  })
  .then(() => { console.log("then2");
  });

以上代碼大家應該都能得出正確的答案:then1 → then1-1 → then2。

雖然 then 是同步執行,并且狀態也已經變更。但這并不代表每次遇到 then 時我們都需要把它的回調丟入微任務隊列中,而是等待 then 的回調執行完畢后再根據情況執行對應操作。

基于此,我們可以得出第一個結論:鏈式調用中,只有前一個 then 的回調執行完畢后,跟著的 then 中的回調才會被加入至微任務隊列。

中級

大家都知道了 Promise resolve 后,跟著的 then 中的回調會馬上進入微任務隊列。

那么以下代碼你認為的輸出會是什么?

let p = Promise.resolve();

p.then(() => { console.log("then1"); Promise.resolve().then(() => { console.log("then1-1");
  });
}).then(() => { console.log("then1-2");
});

p.then(() => { console.log("then2");
}); 

按照一開始的認知我們不難得出 then2 會在 then1-1 后輸出,但是實際情況卻是相反的。

基于此我們得出第二個結論:每個鏈式調用的開端會首先依次進入微任務隊列。

接下來我們換個寫法:

let p = Promise.resolve().then(() => { console.log("then1"); Promise.resolve().then(() => { console.log("then1-1");
  });
}).then(() => { console.log("then2");
});

p.then(() => { console.log("then3");
});

上述代碼其實有個陷阱,then 每次都會返回一個新的 Promise,此時的 p 已經不是 Promise.resolve() 生成的,而是最后一個 then 生成的,因此 then3 應該是在 then2 后打印出來的。

順便我們也可以把之前得出的結論優化為:同一個 Promise 的每個鏈式調用的開端會首先依次進入微任務隊列。

高級

以下大家可以猜猜 then1-2 會在何時打印出來?

Promise.resolve()
  .then(() => { console.log("then1"); Promise.resolve()
      .then(() => { console.log("then1-1"); return 1;
      })
      .then(() => { console.log("then1-2");
      });
  })
  .then(() => { console.log("then2");
  })
  .then(() => { console.log("then3");
  })
  .then(() => { console.log("then4");
  });

這題肯定是簡單的,記住第一個結論就能得出答案,以下是解析:

  • 第一次 resolve 后第一個 then 的回調進入微任務隊列并執行,打印 then1
  • 第二次 resolve 后內部第一個 then 的回調進入微任務隊列,此時外部第一個 then 的回調全部執行完畢,需要將外部的第二個 then 回調也插入微任務隊列。
  • 執行微任務,打印 then1-1 和 then2,然后分別再將之后 then 中的回調插入微任務隊列
  • 執行微任務,打印 then1-2 和 then3 ,之后的內容就不一一說明了

接下來我們把 return 1 修改一下,結果可就大不相同啦:

Promise.resolve()
  .then(() => { console.log("then1"); Promise.resolve()
      .then(() => { console.log("then1-1"); return Promise.resolve();
      })
      .then(() => { console.log("then1-2");
      });
  })
  .then(() => { console.log("then2");
  })
  .then(() => { console.log("then3");
  })
  .then(() => { console.log("then4");
  });

當我們 return Promise.resolve() 時,你猜猜 then1-2 會何時打印了?

答案是最后一個才被打印出來。

為什么在 then 中分別 return 不同的東西,微任務的執行順序竟有如此大的變化?以下是筆者的解析。

PS:then 返回一個新的 Promise,并且會用這個 Promise 去 resolve 返回值,這個概念需要大家先了解一下。

根據 Promise A+ 規范

根據規范 2.3.2,如果 resolve 了一個 Promise,需要為其加上一個 then 并 resolve。

if (x instanceof MyPromise) { if (x.currentState === PENDING) {
  } else {
    x.then(resolve, reject);
  } return;
}

上述代碼節選自手寫 Promise 實現。

那么根據 A+ 規范來說,如果我們在 then 中返回了 Promise.resolve 的話會多入隊一次微任務,但是這個結論還是與實際不符的,因此我們還需要尋找其他權威的文檔。

根據 ECMA - 262 規范

根據規范 25.6.1.3.2,當 Promise resolve 了一個 Promise 時,會產生一個NewPromiseResolveThenableJob,這是屬于 Promise Jobs 中的一種,也就是微任務。

This Job uses the supplied thenable and its then method to resolve the given promise. This process must take place as a Job to ensure that the evaluation of the then method occurs after evaluation of any surrounding code has completed.

并且該 Jobs 還會調用一次 then 函數來 resolve Promise,這也就又生成了一次微任務。

這就是為什么會觸發兩次微任務的來源。

藍藍設計m.wowo44.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

日歷

鏈接

個人資料

藍藍設計的小編 http://m.wowo44.com

存檔

国产性猛交xx乱_性色国产成人久久久精品_亚洲成年人av_亚洲av片不卡无码久久_日本精品一二三_久久免费精品国产_欧美成人精品一区二区综合免费_无码人妻丰满熟妇区毛片蜜桃精品_四虎永久免费影院_国产一区二区三区四区在线
欧美精品vⅰdeose4hd| 亚洲精品一二三| 日韩成人伦理电影在线观看| 深夜福利网站在线观看| 四虎永久免费在线| 国产女同互慰高潮91漫画| 精品在线亚洲视频| 在线看片中文字幕| 久久久五月婷婷| 国产在线一区观看| 毛片视频免费播放| 久久久青草青青国产亚洲免观| 麻豆成人91精品二区三区| 亚洲午夜福利在线观看| 日韩欧美三级在线| 久久精品理论片| 手机毛片在线观看| 国产视频一区在线播放| 国产日产欧美精品一区二区三区| 日韩一级片在线观看| 成人做爰69片免费| 日韩中文字幕亚洲一区二区va在线| 91在线免费看| 欧美影院一区二区三区| 夜夜嗨av一区二区三区| 日本精品一二三区| 日韩一区二区三区视频| 美国毛片一区二区三区| 免费看91的网站| 欧美激情一区二区三区不卡| 成人一区二区三区| 在线免费观看一区| 亚洲成人福利片| 精品夜夜澡人妻无码av| 欧美精品一区二区久久久 | 午夜久久久久久久久久一区二区| 国产精九九网站漫画| 91麻豆精品国产自产在线| 人妖欧美一区二区| 国产真人真事毛片视频| 国产精品色哟哟| 91小视频在线| 日韩一级二级三级| 国产乱国产乱300精品| 国产精品 欧美激情| 一区二区三区四区蜜桃| 北岛玲一区二区| 国产亚洲欧美日韩日本| 成人av影视在线观看| 欧美日本一区二区三区四区| 麻豆91精品视频| 日韩欧美国产成人精品免费| 亚洲一区二区欧美日韩| 97超碰在线资源| 国产精品美女久久久久久久| 无码人妻一区二区三区一| 精品日韩成人av| 成人国产一区二区三区精品| 欧美日韩精品一区二区三区蜜桃 | 精品中文av资源站在线观看| 特级片在线观看| 日韩成人精品在线观看| 精品自拍偷拍视频| 视频在线在亚洲| 三级全黄做爰视频| 日韩高清一区在线| 久久国产波多野结衣| 亚洲777理论| 来吧亚洲综合网| 午夜激情一区二区| 男女做暖暖视频| 日本不卡一二三| 色综合久久久久久久| 日本不卡高清视频| 色久优优欧美色久优优| 另类小说色综合网站| 色噜噜久久综合| 久久99精品国产.久久久久久| 色激情天天射综合网| 加勒比av一区二区| 欧美人与禽zozo性伦| 成人在线视频首页| 日韩精品一区在线| 在线观看欧美一区二区| 国产女主播视频一区二区| 六十路息与子猛烈交尾| 亚洲欧美日韩国产综合在线 | 久久久精品国产免费观看同学| 国产大学生av| 国产精品日日摸夜夜摸av| 精品一区二区三区不卡| 欧美日免费三级在线| 国产成人免费av在线| 欧美一区二区三区爱爱| 99国产精品视频免费观看| 久久久久久久久久看片| 国产 xxxx| 亚洲黄一区二区三区| 情侣偷拍对白清晰饥渴难耐| 美国十次了思思久久精品导航| 欧美日韩成人综合在线一区二区| 岛国精品在线播放| 久久看人人爽人人| 中文字幕日韩三级片| 亚洲一区二区三区在线| 色域天天综合网| 国产91精品久久久久久久网曝门| 精人妻一区二区三区| 亚洲精品国产无天堂网2021| 神马久久精品综合| 国产乱码字幕精品高清av | 91精品国产综合久久久久久久| www.99精品| 欧美激情一区二区三区全黄| 女人又爽又黄免费女仆| 日韩激情一区二区| 91麻豆精品国产91久久久| 爱情岛论坛亚洲自拍| 日韩美女精品在线| 永久免费看黄网站| 从欧美一区二区三区| 国产欧美一区二区精品婷婷 | 后入内射无码人妻一区| 欧美色综合久久| caoporm超碰国产精品| 国产欧美日韩激情| 久久视频精品在线观看| 久久成人免费日本黄色| 欧美电影免费观看完整版| 欧美无人区码suv| 三级欧美韩日大片在线看| 欧美老女人第四色| 手机免费看av片| 午夜欧美2019年伦理| 这里只有精品视频在线观看| 男男一级淫片免费播放| 亚洲成av人影院| 91精品国产综合久久蜜臀| 噜噜噜在线视频| 日韩高清不卡在线| 精品国产一区a| 熟女少妇内射日韩亚洲| 国产精品资源在线看| 亚洲国产成人私人影院tom| 久久精品亚洲a| www.成人网.com| 一区二区三区高清在线| 欧美另类高清zo欧美| 国产麻豆天美果冻无码视频| 久久草av在线| 国产日韩欧美精品一区| 麻豆精品一区二区三区视频| 99久久精品免费看国产免费软件| 一区二区三区日韩欧美| 日韩午夜激情视频| 欧美自拍偷拍网| 成人精品国产福利| 亚洲一区二区在线免费看| 777久久久精品| 国产123在线| 顶级嫩模精品视频在线看| 亚洲女人的天堂| 91麻豆精品91久久久久同性| 欧美狂猛xxxxx乱大交3| 国产二区国产一区在线观看| 亚洲免费在线看| 91精品国产91久久综合桃花| 免费成人深夜天涯网站| 亚洲一区二区3| 日韩欧美国产高清| 搜索黄色一级片| 最新版天堂资源在线| 韩国三级在线一区| 亚洲人成影院在线观看| 91精品国产一区二区人妖| 无码人中文字幕| 女同性αv亚洲女同志| 国产真实乱子伦精品视频| 亚洲精品ww久久久久久p站| 日韩一级欧美一级| 午夜国产福利一区二区| 国产精品九九视频| 国产成人鲁色资源国产91色综 | 国产精品久久久久久福利一牛影视 | 日韩一区二区三区高清免费看看| 免费看的黄色网| 小日子的在线观看免费第8集| 麻豆精品一二三| 亚洲三级电影网站| 欧美本精品男人aⅴ天堂| 看片网站在线观看| jizz日本免费| 99在线精品观看| 久久er99精品| 一区二区三区波多野结衣在线观看| 精品国产三级电影在线观看| 色婷婷精品久久二区二区蜜臀av| 一级做a爰片毛片| 96av麻豆蜜桃一区二区| 久久精品国产精品亚洲红杏|