function con(){
console.log(arguments[0])
}
process.nextTick(function A(){
con(1);
setImmediate(function(){
con("imemediate1")
})
})
setTimeout(function(){
con("timeOut")
},0)
setImmediate(function(){
con("imemediate2")
})
setImmediate(function(){
con("imemediate3")
})
输出结果是setImmediate
的执行是在下一次event-loop之前执行,那为什么3个setImediate的输出顺序是2->3->1,求详细解答
process.nextTick
是执行完所有同步任务,再执行其中内容;setTimeout
,setImmediate
恰巧又不是同步任务(或者说优先级不够process.nextTick
高),所以会先执行
process.nextTick
中的function A
, 所以最先输出的是1
,然后把immediate1
放入宏队列然后开始执行宏任务队列
由于
setTimeout
的优先级高于setIImmediate
所以先输出timeOut
,然后继续队列,输出
immediate2
,输出immediate3
,最后是队列最后的
immediate1
附
宏任务: script, setTimeout, setInterval, setImmediate, I/O, UI rendering;
微任务: process.nextTick, Promise, Object.observe, MutationObserver;
其它的demo