精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JavaScript 事件循環 —— 微任務 Microtask

開發 前端
Promise 的處理程序(handlers).then、.catch 和 .finally 都是異步的。即便一個 promise 立即被 resolve,.then、.catch 和 .finally 下面 的代碼也會在這些處理程序(handler)之前被執行。

[[376565]]

微任務(Microtask)

Promise 的處理程序(handlers).then、.catch 和 .finally 都是異步的。

即便一個 promise 立即被 resolve,.then、.catch 和 .finally 下面 的代碼也會在這些處理程序(handler)之前被執行。

示例代碼如下:

  1. let promise = Promise.resolve(); 
  2.  
  3. promise.then(() => alert("promise done!")); 
  4.  
  5. alert("code finished"); // 這個 alert 先顯示 

如果你運行它,你會首先看到 code finished,然后才是 promise done。

這很奇怪,因為這個 promise 肯定是一開始就完成的。

為什么 .then 會在之后才被觸發?這是怎么回事?

微任務隊列(Microtask queue)

異步任務需要適當的管理。為此,ECMA 標準規定了一個內部隊列 PromiseJobs,通常被稱為“微任務隊列(microtask queue)”(V8 術語)。

如 規范[1] 中所述:

  • 隊列(queue)是先進先出的:首先進入隊列的任務會首先運行。
  • 只有在 JavaScript 引擎中沒有其它任務在運行時,才開始執行任務隊列中的任務。

或者,簡單地說,當一個 promise 準備就緒時,它的 .then/catch/finally 處理程序(handler)就會被放入隊列中:但是它們不會立即被執行。當 JavaScript 引擎執行完當前的代碼,它會從隊列中獲取任務并執行它。

這就是為什么在上面那個示例中 "code finished" 會先顯示。

 

Promise 的處理程序(handler)總是會經過這個內部隊列。

如果有一個包含多個 .then/catch/finally 的鏈,那么它們中的每一個都是異步執行的。也就是說,它會首先進入隊列,然后在當前代碼執行完成并且先前排隊的處理程序(handler)都完成時才會被執行。

如果執行順序對我們很重要該怎么辦?我們怎么才能讓 code finished 在 promise done 之后運行呢?

很簡單,只需要像下面這樣使用 .then 將其放入隊列:

  1. Promise.resolve() 
  2.   .then(() => alert("promise done!")) 
  3.   .then(() => alert("code finished")); 

現在代碼就是按照預期執行的。

未處理的 rejection

還記得 使用 promise 進行錯誤處理[2] 一章中的 unhandledrejection 事件嗎?

現在,我們可以確切地看到 JavaScript 是如何發現未處理的 rejection 的。

如果一個 promise 的 error 未被在微任務隊列的末尾進行處理,則會出現“未處理的 rejection”。

正常來說,如果我們預期可能會發生錯誤,我們會在 promise 鏈上添加 .catch 來處理 error:

  1. let promise = Promise.reject(new Error("Promise Failed!")); 
  2. promise.catch(err => alert('caught')); 
  3.  
  4. // 不會運行:error 已經被處理 
  5. window.addEventListener('unhandledrejection', event => alert(event.reason)); 

但是如果我們忘記添加 .catch,那么,微任務隊列清空后,JavaScript 引擎會觸發下面這事件:

  1. let promise = Promise.reject(new Error("Promise Failed!")); 
  2.  
  3. // Promise Failed! 
  4. window.addEventListener('unhandledrejection', event => alert(event.reason)); 

如果我們遲一點再處理這個 error 會怎樣?例如:

  1. let promise = Promise.reject(new Error("Promise Failed!")); 
  2. setTimeout(() => promise.catch(err => alert('caught')), 1000); 
  3.  
  4. // Error: Promise Failed! 
  5. window.addEventListener('unhandledrejection', event => alert(event.reason)); 

現在,如果我們運行上面這段代碼,我們會先看到 Promise Failed!,然后才是 caught。

如果我們并不了解微任務隊列,我們可能會想:“為什么 unhandledrejection 處理程序(handler)會運行?我們已經捕獲(catch)并處理了 error!”

但是現在我們知道了,當微任務隊列中的任務都完成時,才會生成 unhandledrejection:引擎會檢查 promise,如果 promise 中的任意一個出現 "rejected" 狀態,unhandledrejection 事件就會被觸發。

在上面這個例子中,被添加到 setTimeout 中的 .catch 也會被觸發。只是會在 unhandledrejection 事件出現之后才會被觸發,所以它并沒有改變什么(沒有發揮作用)。

總結

Promise 處理始終是異步的,因為所有 promise 行為都會通過內部的 "promise jobs" 隊列,也被稱為“微任務隊列”(V8 術語)。

因此,.then/catch/finally 處理程序(handler)總是在當前代碼完成后才會被調用。

如果我們需要確保一段代碼在 .then/catch/finally 之后被執行,我們可以將它添加到鏈式調用的 .then 中。

在大多數 JavaScript 引擎中(包括瀏覽器和 Node.js),微任務(microtask)的概念與“事件循環(event loop)”和“宏任務(macrotasks)”緊密相關。由于這些概念跟 promise 沒有直接關系,所以我們將在 圖解 JavaScript 事件循環:微任務和宏任務 一文中對它們進行介紹。

現代 JavaScript 教程:開源的現代 JavaScript 從入門到進階的優質教程。React 官方文檔推薦,與 MDN 并列的 JavaScript 學習教程[3]。

在線免費閱讀:https://zh.javascript.info

參考資料

 

[1]規范: https://tc39.github.io/ecma262/#sec-jobs-and-job-queues[2]使用 promise 進行錯誤處理: https://zh.javascript.info/promise-error-handling[3]React 官方文檔推薦,與 MDN 并列的 JavaScript 學習教程: https://zh-hans.reactjs.org/docs/getting-started.html#javascript-resources

 

責任編輯:武曉燕 來源: 技術漫談
相關推薦

2020-12-29 08:21:03

JavaScript微任務宏任務

2024-10-23 16:02:40

JavaScriptPromiserejection

2021-08-17 09:55:05

JavaScript MicrotaskPromise

2022-06-13 10:24:47

宏任務微任務前端

2021-07-24 11:15:19

開發技能代碼

2023-12-29 12:20:12

$nextTick循環機制循環

2016-09-06 21:23:25

JavaScriptnode異步

2023-04-06 00:22:19

JavaScrip任務開發

2009-03-17 15:36:29

JavaScript循環事件

2022-08-18 11:36:16

可視化JavaScript事件循環

2017-05-02 22:38:44

前端開發JS事件循環機制

2017-03-28 21:25:19

無循環代碼JavaScript

2021-10-22 08:29:14

JavaScript事件循環

2024-08-26 14:52:58

JavaScript循環機制

2021-12-25 22:29:57

Node.js 微任務處理事件循環

2021-10-15 09:56:10

JavaScript異步編程

2020-04-26 08:21:43

javascriptVue

2017-01-05 09:07:25

JavaScript瀏覽器驅動

2015-11-06 13:59:01

JavaScript事件處理

2022-03-11 14:59:21

JavaScript數組字符串
點贊
收藏

51CTO技術棧公眾號

欧美xxxxx在线视频| 亚洲www视频| 蜜桃av噜噜一区二区三| 最新黄色av网址| 国产精品色婷婷在线观看| 亚洲精品v日韩精品| 国产成人高潮免费观看精品| 免费成人深夜天涯网站| 精品国产一区二区三区2021| 精品久久久香蕉免费精品视频| 97精品久久久中文字幕免费| 亚洲黄色小说视频| 香蕉久久久久久| 91蜜桃婷婷狠狠久久综合9色| 亚洲成人a**站| 国产中文字幕免费观看| 成人ww免费完整版在线观看| 99久久久久久| 91嫩草在线视频| 亚洲 欧美 成人| 午夜精品久久久久99热蜜桃导演 | 黄页免费欧美| 一区二区三区在线免费| 日韩不卡av| 黄色片网站免费在线观看| 人人超碰91尤物精品国产| 欧美激情性做爰免费视频| 免费看的黄色录像| 小说区图片区色综合区| 日韩欧美在线不卡| 欧美一级裸体视频| 中文字幕成在线观看| 亚洲一区二区中文在线| 亚洲午夜高清视频| 黄色av网址在线免费观看| 成人h动漫精品一区二区| 91免费看国产| 中文字幕 视频一区| 国产农村妇女毛片精品久久莱园子| 亚洲女人被黑人巨大进入al| 麻豆av免费看| 成人国产精品久久| 欧美日韩成人在线一区| www.99av.com| av高清一区| 色噜噜狠狠成人中文综合 | 日韩国产欧美一区二区| 国产视频精品免费播放| 无码人妻丰满熟妇啪啪网站| 国产精品美女久久久久人| 欧美日韩一区二区三区四区| 国产免费人做人爱午夜视频| 666av成人影院在线观看| 疯狂做受xxxx高潮欧美日本| 成人黄色av片| 久久青草伊人| 欧美色播在线播放| 黑鬼大战白妞高潮喷白浆| 伊人久久精品一区二区三区| 欧美视频中文字幕在线| 日韩免费毛片视频| 国产韩日精品| 9191成人精品久久| 九一精品久久久| 免费观看亚洲视频大全| 欧美大黄免费观看| 色姑娘综合天天| 麻豆传媒在线完整视频| 国产精品久久久久永久免费观看 | 最近中文字幕2019免费| 91精品国产自产在线| 亚洲视频中文字幕在线观看| 男女男精品视频网| 成人网在线观看| 在线观看成人毛片| 在线成人黄色| 奇米一区二区三区四区久久| 国产成人麻豆免费观看| 久久国产人妖系列| 国产欧美日韩最新| www.五月天激情| 99国产精品视频免费观看| 日本一区二区不卡| 在线观看中文字幕码| 国产一区二区三区精品视频| 成人av免费电影| 天堂a√在线| 日本一区二区三级电影在线观看| 97欧洲一区二区精品免费| 亚洲经典一区二区三区| 91美女在线观看| 制服丝袜综合日韩欧美| 成av人片在线观看www| 日本一区二区在线不卡| 亚洲蜜桃在线| 国产探花视频在线观看| 欧美日韩中文字幕| 欧美成人乱码一二三四区免费| 国产三级视频在线看| 国产精品国产三级国产有无不卡| 欧美日韩一区二区三区在线视频| 亚洲欧美另类视频| 国产亚洲欧洲997久久综合| 中文字幕久久一区| 麻豆国产在线| 欧美一区二区三区日韩视频| 中文字幕影片免费在线观看| 久久在线电影| 亚洲日本一区二区三区| 久久艹在线视频| 欧美无人区码suv| 欧美色婷婷久久99精品红桃| 日韩精品一区二区视频| 91视频免费看片| 亚洲美女毛片| 久久精品国产96久久久香蕉| 人妻aⅴ无码一区二区三区 | 日韩欧美一区二区三区| wwwwwxxxx日本| 日本在线中文字幕一区| 日韩中文字幕免费视频| 69亚洲精品久久久蜜桃小说| 国产精品1024| 中文字幕一区二区三区四区五区六区 | 国产午夜福利一区二区| 久久精品久久精品| 蜜桃91精品入口| 1234区中文字幕在线观看| 91.com在线观看| 熟女少妇内射日韩亚洲| 国产欧美丝祙| 国产精品视频在线免费观看| 国产福利视频在线| 欧美喷水一区二区| 亚洲精品午夜视频| 久久亚洲欧洲| 欧美三日本三级少妇三99| 国产一二三在线| 欧美精品一区二区蜜臀亚洲| 69av.com| 国产高清不卡二三区| www.亚洲一区二区| 男女啪啪在线观看| 色综合色狠狠天天综合色| 日韩av成人网| 欧美精品日本| 91精品国产高清自在线看超| 精品二区在线观看| 亚洲日本在线a| 国产精品久久久久久9999| 成人一区而且| 国产精品大陆在线观看| 第一视频专区在线| 欧美天堂一区二区三区| 亚洲色图欧美色| 另类欧美日韩国产在线| 一区二区三区四区国产| 96sao精品免费视频观看| 久久亚洲一区二区三区四区五区高| 久久免费公开视频| 国产成人综合视频| 成年人网站国产| 国产精品xxx在线观看| 亚洲91精品在线观看| 日本一卡二卡四卡精品 | 亚洲一区二区不卡视频| 六九午夜精品视频| 乱亲女秽乱长久久久| а√中文在线资源库| 亚洲高清三级视频| 国产精品无码久久久久久| 丝袜亚洲另类丝袜在线| 日韩精品久久久免费观看| 日本一区二区中文字幕| 美女久久久久久久| 无码精品在线观看| 欧美中文字幕久久| 国产性xxxx| 97精品电影院| 一个色综合久久| 欧美婷婷在线| 日韩av不卡在线播放| 成人黄色91| 欧美亚洲国产精品| 色综合久久久久综合一本到桃花网| 日韩欧美在线国产| 二区三区四区视频| 94色蜜桃网一区二区三区| aa在线免费观看| 亚洲啊v在线观看| 精品1区2区| 久久免费资源| 久久噜噜噜精品国产亚洲综合| 99精品在线看| 久久中文字幕电影| 亚洲欧美自拍另类日韩| 少妇精品久久久| 91精品国产91久久久久久不卡| 国产精品久久影视| 亚洲电影一级黄| 亚洲不卡的av| 99精品欧美一区二区三区综合在线| 日韩中文在线字幕| 亚洲色图美女| 亚洲bt欧美bt日本bt| 欧美二三四区| 欧美高清在线播放| 91电影在线播放| 精品视频久久久| 国产黄色片av| 欧美性极品少妇| 国产一级片毛片| 亚洲精品中文字幕在线观看| 微拍福利一区二区| 波多野结衣中文字幕一区二区三区| 国产乱子伦精品视频| 91成人在线| 久久久久久国产| 老司机在线视频二区| 777午夜精品免费视频| 国产又大又黄视频| 一区二区三区四区av| 夜夜春很很躁夜夜躁| av中文字幕在线不卡| 亚洲AV无码久久精品国产一区| 欧美日韩一区二区高清| 亚洲精品影院| 你懂的一区二区三区| 国产不卡一区二区在线观看| www欧美在线观看| 国产精品久久久久999| 欧美二三四区| 日本精品久久久| 欧美黄色视屏| 欧美黑人又粗大| 国产三区视频在线观看| 日韩中文字幕视频在线观看| 精品三级久久久久久久电影聊斋| 欧美日韩国产小视频在线观看| 天天看片中文字幕| 中文在线一区二区| 欧美偷拍一区二区三区| 国产午夜亚洲精品羞羞网站| theav精尽人亡av| av不卡一区二区三区| 久久久久久久人妻无码中文字幕爆| 丝袜诱惑制服诱惑色一区在线观看 | 97在线免费公开视频| 在线亚洲一区| 欧美三级一级片| 国产亚洲高清视频| www国产黄色| 日韩av中文字幕一区二区三区| 男女啪啪的视频| 亚洲人metart人体| 成人在线视频网址| 亚洲天堂中文字幕在线观看| 岛国一区二区三区高清视频| 日本亚洲视频| 粉嫩av免费一区二区三区| 欧美一区一区| 成人自拍视频网站| 开心激情综合| 久久久久久a亚洲欧洲aⅴ| 亚洲午夜久久| 亚洲激情啪啪| 欧美激情性爽国产精品17p| 日韩欧美猛交xxxxx无码| 国产一区二区三区成人欧美日韩在线观看| 亚洲精品一区二区三| 天天做天天爱天天综合网| 国产精品久久国产精品| 亚洲精品高潮| 国产一区高清视频| 国产毛片一区二区三区| 亚洲一二三区在线| 亚洲网站在线| 日韩视频免费在线播放| 国产主播一区二区三区| 男女一区二区三区| 久久精品一区二区三区不卡| 免费黄色国产视频| 亚洲午夜av在线| 中文字幕xxxx| 欧美一区二区三区在| 手机av免费在线观看| 亚洲欧美中文另类| 日本在线观看网站| 91精品国产91久久久久久不卡| 乱人伦中文视频在线| 免费97视频在线精品国自产拍| 久久99久久| 欧美成人自拍视频| 中文字幕在线高清| 91丝袜脚交足在线播放| 亚洲系列另类av| 99er在线视频| 蜜桃av一区二区在线观看| 精品少妇人妻av一区二区三区| 国产丶欧美丶日本不卡视频| 亚洲天堂久久新| 亚洲欧美另类综合偷拍| 黄色大片网站在线观看| 欧美一级片在线| 黄色片免费在线| 欧美黑人xxx| 欧美成人毛片| 久久国产一区二区| 亚洲欧美偷拍自拍| 精品久久久久久久无码| 成人免费毛片片v| 亚洲视频重口味| 色婷婷av一区二区三区gif| 精品久久久久成人码免费动漫| 欧美一级搡bbbb搡bbbb| 国产专区在线播放| 久久久久五月天| 99久久久国产| 午夜精品一区二区三区在线观看| 日韩激情在线| 欧美性久久久久| 成人黄色网址在线观看| 国产极品国产极品| 欧美高清激情brazzers| 精品欧美不卡一区二区在线观看| 亚洲乱码一区二区| 国内高清免费在线视频| 91丝袜美腿美女视频网站| 红桃成人av在线播放| 啊啊啊一区二区| av一二三不卡影片| 国产一级视频在线观看| 欧美一级欧美一级在线播放| 久操视频在线免费播放| 国产欧美日韩综合精品| 成人三级视频| 91在线视频观看免费| 久久精品无码一区二区三区| 九九九在线观看| 国产视频丨精品|在线观看| 国产白浆在线免费观看| 国产一区二区三区黄| 亚洲美女黄色| 国产激情视频网站| 午夜精品久久久久久久| 国产美女激情视频| 精品国产91洋老外米糕| 男女免费观看在线爽爽爽视频| 亚洲电影一级片| 欧洲一区二区在线观看| 久久久www| 亚洲欧美va天堂人熟伦| 精品欧美一区二区三区| 天堂91在线| 国产成人精彩在线视频九色| 国精一区二区| www.com黄色片| 亚洲人成精品久久久久| www.蜜桃av.com| 91av在线看| 自拍欧美一区| 手机看片一级片| 亚洲欧美区自拍先锋| 亚洲精品综合久久| 久久久伊人欧美| 免费电影一区二区三区| 黑人粗进入欧美aaaaa| 一区在线播放视频| 亚洲成人中文字幕在线| 91国内产香蕉| 国产毛片一区二区三区| 五月天av在线播放| 一区二区三区在线免费| 五十路在线观看| 国产精品入口免费视| 66视频精品| 亚洲婷婷在线观看| 色偷偷久久人人79超碰人人澡| 国产草草影院ccyycom| 九九九久久久久久| 久久夜色精品国产噜噜av小说| 青青在线视频免费观看| www.亚洲人| 国产在线一级片| 欧美成年人网站| 亚洲人亚洲人色久| 成年人网站av| 岛国av一区二区三区| 成人av一区| 99re国产视频| 天堂蜜桃一区二区三区| 国产女片a归国片aa| 亚洲免费av网址| 精品久久久久久久久久岛国gif| 亚洲免费在线精品一区| 福利一区二区在线| 男人天堂av电影| 91精品午夜视频| 阿v视频在线| 亚洲伊人婷婷|