执行队列(同步) 任务队列(异步事件)
每当异步任务完成后会在任务队列中添加一个关联事件,待执行队列任务执行完成,将对应的异步任务callback移入执行队列中执行
循环重复tick
process.nextTick
本轮事件循环,执行队列尾部1setTimeout(0)
本轮事件循环,任务队列尾部3setImmediate
本轮事件循环,任务队列尾部(与setTimeout执行顺序不确定)3then
本轮事件循环,任务队列头部2
setImmediate(function () {
console.log(7)
});
setTimeout(function () {
console.log(1)
}, 0);
process.nextTick(function () {
console.log(6)
process.nextTick(function () {
console.log(8)
})
});
new Promise(function executor(resolve) {
console.log(2);
for (var i = 0; i < 10000; i++) {
i == 9999 && resolve();
}
console.log(3);
}).then(function () {
console.log(4);
});
console.log(5);
//执行队列(同步) 2 3 5 6 8
//任务队列(异步) 4 (1,7)
function timeout() {//一直重复tick
setTimeout(() => test(), 0);
}
function tick() {// 霸占执行队列,事件循环无法进入
process.nextTick(()=>p());
}