Nodejs和JavaScript任务队列

1.JavaScript事件循环

Nodejs和JavaScript任务队列 - 图1

2.宏任务和微任务

Nodejs和JavaScript任务队列 - 图2

Nodejs和JavaScript任务队列 - 图3

setImmmediate【不能指定延迟事件】

Nodejs和JavaScript任务队列 - 图4

Nodejs和JavaScript任务队列 - 图5

Nodejs和JavaScript任务队列 - 图6

MutationObserver【专门监听节点的变化】

Nodejs和JavaScript任务队列 - 图7

Nodejs和JavaScript任务队列 - 图8

事件执行的完整流程

宏任务和微任务分开

Nodejs和JavaScript任务队列 - 图9

Nodejs和JavaScript任务队列 - 图10

第二种宏任务中包含微任务

Nodejs和JavaScript任务队列 - 图11

Nodejs和JavaScript任务队列 - 图12

宏任务重包含微任务,微任务重包含宏任务

Nodejs和JavaScript任务队列 - 图13

Nodejs和JavaScript任务队列 - 图14

Nodejs和JavaScript任务队列 - 图15

3.Nodejs队列

1.任务队列不同,Nodejs有6个任务队列

Nodejs和JavaScript任务队列 - 图16

Nodejs和JavaScript任务队列 - 图17

Nodejs和JavaScript任务队列 - 图18

2.Nodejs没有微任务队列

Nodejs和JavaScript任务队列 - 图19

3.微任务执行时机不同

Nodejs和JavaScript任务队列 - 图20

Nodejs和JavaScript任务队列 - 图21

Nodejs和JavaScript任务队列 - 图22

4.微任务优先级不同

Nodejs和JavaScript任务队列 - 图23

Nodejs没有dom节点,所以MutationObserver微任务不需要存在

Nodejs和JavaScript任务队列 - 图24

process.nextTick的优先级比Promis高

Nodejs和JavaScript任务队列 - 图25

4.Nodejs执行完整顺序

案例1:

同步代码立即执行

Nodejs和JavaScript任务队列 - 图26

同步代码执行完立即执行微任务

Nodejs和JavaScript任务队列 - 图27

Nodejs和JavaScript任务队列 - 图28

最终结果

Nodejs和JavaScript任务队列 - 图29

案例2:

Nodejs和JavaScript任务队列 - 图30

Nodejs和JavaScript任务队列 - 图31

Nodejs和JavaScript任务队列 - 图32

面试题

问题1

Nodejs和JavaScript任务队列 - 图33

问题2:poll异步之后等待执行poll的回调

Nodejs和JavaScript任务队列 - 图34

Nodejs和JavaScript任务队列 - 图35