关于nextTick的一点疑问
发布于 8 年前 作者 yinlubin2014 3866 次预览 最后一次回复是 8 年前 来自 问答
//加入两个setImmediate()回调函数
setImmediate(function(){
console.log("setImmediate延迟执行1");
process.nextTick(function(){
console.log("强势插入");
});
});
setImmediate(function(){
console.log("setImmediate延迟执行2");
});
为什么执行结果是: setImmediate延迟执行1 setImmediate延迟执行2 强势插入
但是我理解process.nextTick 不是会放到任务队列前面吗? 所以应该是
setImmediate延迟执行1 强势插入 setImmediate延迟执行2
才对
6 回复
异步是容易造成逻辑混乱。上面是你想表达的代码。官方文档建议不要用 process.nextTick。doc
@ianchn 我知道,但是我只是想知道为什么nextTick没有在 延迟执行2之前执行
@ianchn 这个好像 我问你为什么无糖可乐也会很甜,但是你回答喝可乐也杀精不如去喝茶。
https://cnodejs.org/topic/590c4d7ed371b6372a8af5ee
node的机制是执行完宏任务后会去清掉微任务队列里注册的任务,一个function的执行可以看成一个宏任务,setImmediate,setTimeout这些也可以看成宏队列,promise.then与nextTick是微队列,先执行function,把两个setInmediate推入队列,执行第一个时发现nextTick,推入微队列,执行第二个,执行nextTick
@rwing 感谢。