console.log(1);
setTimeout(()=>{
console.log(2);
setTimeout(() => {
console.log(4);
});
process.nextTick(()=>{
console.log(3);
});
});
setTimeout(() => {
console.log(5);
});
怎么解释这段运行呢?为什么顺序是 534 而不是 345
1
noe132 2018-07-28 13:10:22 +08:00 via Android 1
settimeout 是将一个任务 push 进异步队列
在 V8 中,异步队列每次 eventloop 执行一个任务 nextTick 是每次 eventloop 的 step 间隔都会执行,所以 nextTick 会在 settimeout 之前执行。 所以顺序是 12534 |
2
noe132 2018-07-28 13:11:44 +08:00 via Android
nextTick 不像异步队列一次只执行一个,nextTick 队列是一次完全执行完。所以不能再 nextTick 的回调再 nextTick,这样就会死循环阻塞 eventloop
|