setTimeout、Promise、nexTick、setImmediate同时存在的执行顺序

86 阅读1分钟

process.nextTick在当前执行栈尾部,下一次EventLoop开始之前执行

setImmediate 主线程和事件队列执行完成后立即执行

需要使用node执行

console.log('主任务1') // 1
setTimeout(function C() {
    console.log('setTimeout0'); // 9
}, 0)
console.log('主任务2') // 2
setImmediate(function () {
    console.log('setImmediate'); // 8
});
const promise = new Promise((resolve)=>{
    console.log('promise 1') // 3
    resolve()
})
setTimeout(function C() {
    console.log('setTimeout1'); // 10
}, 0)
promise.then(res=>{
    console.log('promise then') // 5
})
console.log('主任务3') // 4

process.nextTick(function A() {
    console.log('nextTick1'); // 6
    process.nextTick(function B(){console.log('nextTick2');}); // 7
});
/*
主任务1
主任务2
promise 1
promise then
nextTick1
nextTick2
setImmediate
setTimeout0
setTimeout1
*/