JS中的事件循环和任务队列( 三 )


下一个事件循环 , 再回到 macrotask 取其中的下一项任务
再重复2
反复执行事件循环…
NodeJS引擎中:
先执行script中的所有同步代码 , 过程中把所有异步任务压进它们各自的队列(假设维护有process.nextTick队列、promise.then队列、setTimeout队列、setImmediate队列等4个队列)
按照优先级(process.nextTick > promise.then > setTimeout > setImmediate) , 选定一个 不为空 的任务队列 , 按先进先出的顺序 , 依次执行所有任务 , 执行过程中新产生的异步任务继续压进各自的队列尾 , 直到被选定的任务队列清空 。
重复2...
也就是说 , NodeJS引擎中 , 每清空一个任务队列后 , 都会重新按照优先级来选择一个任务队列来清空 , 直到所有任务队列被清空 。




推荐阅读