setTimeout(() => {
console.log('1 setTimeout')
setTimeout(() => {
console.log('2 setTimeout')
}, 0)
setImmediate(() => {
console.log('3 setImmediate')
})
}, 0)
setImmediate(() => {
console.log('4 setImmediate')
})
let count = 0
setTimeout(() => {
console.log('1 setTimeout')
}, 0)
const i = setInterval(() => {
console.log('2 setInterval')
count++
if (count === 5) {
clearInterval(i)
}
setTimeout(() => {
console.log('3 setTimeout ', count)
}, 0)
}, 0)
setTimeout(() => {
console.log('4 setTimeout')
}, 0)
setTimeout(() => {
console.log('1 setTimeout')
setTimeout(() => {
console.log('2 setTimeout')
}, 0)
setImmediate(() => {
console.log('3 setImmediate')
})
setTimeout(() => {
console.log('4 setTimeout')
}, 0)
setImmediate(() => {
console.log('5 setImmediate')
})
}, 0)
setTimeout(() => {
console.log('1 setTimeout')
setTimeout(() => {
console.log('2 setTimeout')
}, 0)
setImmediate(() => {
console.log('3 setImmediate')
new Promise(res => res()).then(() => {
console.log('4 promise')
})
process.nextTick(() => {
console.log('5 nextTick')
})
})
setTimeout(() => {
console.log('6 setTimeout')
}, 0)
setImmediate(() => {
console.log('7 setImmediate')
})
}, 0)
setTimeout(() => {
console.log('1 setTimeout')
setTimeout(() => {
console.log('2 setTimeout')
}, 0)
setImmediate(() => {
console.log('3 setImmediate')
})
new Promise(res => res()).then(() => {
console.log('4 promise')
})
process.nextTick(() => {
console.log('5 nextTick')
})
setTimeout(() => {
console.log('6 setTimeout')
}, 0)
setImmediate(() => {
console.log('7 setImmediate')
})
}, 0)
setTimeout(() => {
console.log('1 timeout')
}, 0)
setInterval(() => {
console.log('2 interval')
}, 0)
setTimeout(() => {
console.log('3 timeout')
}, 0)
setInterval(() => {
console.log('4 interval')
}, 0)
setTimeout(() => {
console.log('5 timeout')
}, 0)
setTimeout(() => {
console.log('1 setTimeout')
setTimeout(() => {
console.log('2 setTimeout')
}, 0)
setImmediate(() => {
console.log('3 setImmediate')
setImmediate(() => {
console.log('4 setImmediate')
})
process.nextTick(() => {
console.log('5 nextTick')
})
})
setImmediate(() => {
console.log('7 setImmediate')
})
setTimeout(() => {
console.log('8 setTimeout')
}, 0)
}, 0)
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(function() {
console.log('setTimeout');
}, 0)
async1();
new Promise(function(resolve) {
console.log('promise1');
resolve();
}).then(function() {
console.log('promise2');
});
console.log('script end');
微任务(microTask)是大爷,宏任务(macroTask)得让着微任务,但是一旦让一个类型的宏任务开始执行,那就得等这个类型的宏任务执行完,然后才能执行微任务!!!在宏任务中被推入队列的宏任务得在下一轮才能开始执行,这一轮没新宏任务的份。