js中:
事件循环: 调用栈执行完 -> 任务队列 (所有微观任务 -> 1个宏观任务 -> 所有微观任务 -> 1 个宏观任务 。。。。。。)
任务队列: setTimeout ajax 之类的都属于宏观任务 Promise属于微观任务
process.nextTick
属于
idle
观察者,
setImmediate
属于
check
观察者。在每一轮事件循环中,
idle
观察者先于
I/O
观察者,
I/O
观察者先于
check
观察者。
example:
setTimeout(() => {
console.log(4)
},0);
new Promise((resolve) => {
console.log(1)
for(var i=0 ; i<10000 ; i++) {
i==9999 && resolve()
}
console.log(2);
}).then(() => {
console.log(5)
});
console.log(3);
new Promise((resolve) => {
console.log(7);
resolve();
}).then(() => {
console.log(6);
})
结果: 1 2 3 7 5 6 4