關(guān)于事件輪詢/循環(huán) EventLoop 宏任務(wù) 微任務(wù) 的簡(jiǎn)單理解

你是否因?yàn)橐恢睕](méi)弄懂事件輪詢而一直懊惱??

你是否在網(wǎng)上搜遍了各種回答、解析,不是字?jǐn)?shù)太多沒(méi)耐心讀完 就是代碼太復(fù)雜看起來(lái)有些吃力?

你是否一直在找能簡(jiǎn)單的把大體意思講明白,知道大約怎么用就行了的回答?

沒(méi)錯(cuò) 你找到我了!

先把萬(wàn)變不離其宗經(jīng)典面試題 先展示給你 結(jié)果直接就是后面的數(shù)字的正確順序 滿足你立即想知道答案的急切心理
setTimeout(_ => console.log(4))

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

console.log(2)

// 在這里 第一個(gè)執(zhí)行的同步代碼為 1 第二個(gè)執(zhí)行的同步代碼為2   然后 3為微任務(wù)  4為宏任務(wù) 所以結(jié)果為1234
先死背這幾點(diǎn):

1.先執(zhí)行同步代碼再執(zhí)行異步代碼
2.先執(zhí)行微任務(wù)再執(zhí)行宏任務(wù)

常見宏任務(wù): setTimeout 、setInterva、I/O , io 簡(jiǎn)單理解為輸入輸出流 上傳文件 點(diǎn)擊按鈕這些與程序之間產(chǎn)生交互的勉強(qiáng)理解為I/O
常見微任務(wù):process.nextTick 、 Promise.then 、catch、finally

所有會(huì)進(jìn)入的異步都是指的事件回調(diào)中的那部分代碼

在同步代碼執(zhí)行完成后才回去檢查是否有異步任務(wù)完成,并執(zhí)行對(duì)應(yīng)的回調(diào),而微任務(wù)又會(huì)在宏任務(wù)之前執(zhí)行。

還有一點(diǎn)關(guān)于promise需要啰嗦一下:

promise本身是同步的 它里面的then才是異步的 這個(gè)需要搞明白
另外如果有人問(wèn) promise主要目的是做什么的
記?。菏墙鉀Q回調(diào)地獄的 它的直接作用就是把多層的嵌套回調(diào),變成一長(zhǎng)串的.then()方法的鏈?zhǔn)秸{(diào)用,主要作用就是方便。

事件輪詢:輪流詢問(wèn) 宏任務(wù)隊(duì)列 和 微任務(wù)隊(duì)列

事件輪詢.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容