关于nextTick的一点疑问
//加入两个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 回复
setImmediate(function(){
console.log("setImmediate延迟执行1");
setImmediate(function(){
console.log("setImmediate延迟执行2");
});
process.nextTick(function(){
console.log("强势插入");
});
});
异步是容易造成逻辑混乱。上面是你想表达的代码。官方文档建议不要用 process.nextTick。doc
We recommend developers use setImmediate() in all cases because it’s easier to reason about (and it leads to code that’s compatible with a wider variety of environments, like browser JS.)
node的机制是执行完宏任务后会去清掉微任务队列里注册的任务,一个function的执行可以看成一个宏任务,setImmediate,setTimeout这些也可以看成宏队列,promise.then与nextTick是微队列,先执行function,把两个setInmediate推入队列,执行第一个时发现nextTick,推入微队列,执行第二个,执行nextTick