浏览器
关于微任务和宏任务在浏览器的执行顺序是这样的
执行一只task(宏任务)
执行完micro-task队列(微任务)
如此循环往复下去
Node
Node的事件循环是libuv实现的
大体的task宏任务执行顺序是这样的
timers定时器:本阶段执行已经安排的setTimeout()和settinterval()的回调函数
pending callbacks待定回调:执行延迟到下一个循环迭代的I/O回调
idle.prepard仅系统内部使用
poll轮询 检索新的I/O事件,执行与I/O相关的回调(几乎所有情况下,除了关闭的回调函数,它们由计时器和setimmediate排定的之外 ) 其余情况node将在此阻塞
check检测 setimmediate()回调函数在这里执行。
close callbacks关闭的回调函数: 一些准备关闭的回调函数
微任务和宏任务在Node的执行顺序
Node 10以前
执行完一个阶段的所有任务
执行完nexTick队列里面的内容
然后执行完微任务队列的内容
Node 11以后
和浏览器的行为统一了都是每执行一个宏任务就执行完微任务队列。
---Every day to be a little better---
网友评论