日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微任务与宏任务与eventloop

發(fā)布時間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微任务与宏任务与eventloop 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先我們需要了解一個概念,在promise執(zhí)行之前是同步任務,再.then和.catch之后變成微任務

執(zhí)行完同步任務之后,優(yōu)先執(zhí)行微任務

執(zhí)行順序是:

同步任務 ==> 微任務 ==>宏任務

js是單線程的語言,不會同時執(zhí)行兩行代碼,當我們出現(xiàn)alert彈窗時,是無法執(zhí)行下面的console.info的

setTimeout(_ => console.log(4))new Promise(resolve => {resolve()console.log(1) }).then(_ => {console.log(3) })console.log(2)

通過上面的了解,此時應該很好得出這道筆試題的答案了
沒錯,是1 2 3 4

所有的異步回調(diào)函數(shù),執(zhí)行的結果會進入一個隊列,整個隊列就是一個宏任務;
在博客園里一篇文章就形象的解釋了宏任務和微任務的執(zhí)行過程:
A B C三個人同時在銀行某個柜臺辦理存錢業(yè)務(宏任務),A在存完錢之后,沒有離開,選擇購買理財和基金(中途產(chǎn)生了微任務),那么這個時候B C必須要在A完成購買基金理財之后,才能執(zhí)行宏任務

再來解釋一下eventloop,翻譯過來就是事件循環(huán)

每辦理完一個業(yè)務,柜員就會問當前的客戶,是否還有其他需要辦理的業(yè)務。
(檢查還有沒有微任務需要處理)
而客戶明確告知說沒有事情以后,柜員就去查看后邊還有沒有等著辦理業(yè)務的人。
(結束本次宏任務、檢查還有沒有宏任務需要處理)
這個檢查的過程是持續(xù)進行的,每完成一個任務都會進行一次,而這樣的操作就被稱為Event
Loop。(這是個非常簡易的描述了,實際上會復雜很多)

借此再復習一下,async/await這種語法糖結構

setTimeout(_ => console.log(4))async function main() {console.log(1)await Promise.resolve()console.log(3) }main()console.log(2)



async函數(shù)在await之前的代碼都是同步執(zhí)行的,
可以理解為await之前的代碼屬于new Promise時傳入的代碼,
await之后的所有代碼都是在Promise.then中的回調(diào)

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的微任务与宏任务与eventloop的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。