Node.js 为什么要调用process.nextTick()三次?
如果这幅图是正确的,为什么调用了三次Node.js 为什么要调用process.nextTick()三次?,node.js,event-loop,Node.js,Event Loop,如果这幅图是正确的,为什么调用了三次process.nextTick() 有什么区别吗? 在给定阶段调用process.nextTick()时,传递给process.nextTick()的所有回调都将在事件循环继续之前解析 事件循环中有一些短语 在进入下一个阶段之前,事件循环将首先执行所有process.nextTick回调 因此,这取决于调用流程的阶段。nextTick 这里有一个例子 function case1() { setImmediate(() => { proce
process.nextTick()
有什么区别吗?
在给定阶段调用process.nextTick()时,传递给process.nextTick()的所有回调都将在事件循环继续之前解析
事件循环中有一些短语
在进入下一个阶段之前,事件循环将首先执行所有process.nextTick
回调
因此,这取决于调用流程的阶段。nextTick
这里有一个例子
function case1() {
setImmediate(() => {
process.nextTick(() => {
console.log('nextTick')//before going next phase
})
console.log('Immediate')
})
setTimeout(() => {
console.log('timer1') //another phase
})
}
function case2() {
setImmediate(() => {
setImmediate(() => {
console.log('Immediate2') //next event loop
})
console.log('Immediate')
})
setTimeout(() => {
console.log('timer1') //another phase
})
}
然后我在读取文件回调中调用它们,以确保它们在同一阶段(轮询阶段)开始
案例1将是
fs.readFile('./package.json', ()=>{
case1();
//Immediate
//nextTick
//timer1
})
案例2
在给定阶段调用process.nextTick()时,传递给process.nextTick()的所有回调都将在事件循环继续之前解析
事件循环中有一些短语
在进入下一个阶段之前,事件循环将首先执行所有process.nextTick
回调
因此,这取决于调用流程的阶段。nextTick
这里有一个例子
function case1() {
setImmediate(() => {
process.nextTick(() => {
console.log('nextTick')//before going next phase
})
console.log('Immediate')
})
setTimeout(() => {
console.log('timer1') //another phase
})
}
function case2() {
setImmediate(() => {
setImmediate(() => {
console.log('Immediate2') //next event loop
})
console.log('Immediate')
})
setTimeout(() => {
console.log('timer1') //another phase
})
}
然后我在读取文件回调中调用它们,以确保它们在同一阶段(轮询阶段)开始
案例1将是
fs.readFile('./package.json', ()=>{
case1();
//Immediate
//nextTick
//timer1
})
案例2
process.nextTick()
这是一个故障保护,用于防止进程.nextTick()
回调队列完全占用单个可用线程。为了继续尝试尽快清除队列(例如,在下一个滴答声中),将在单个事件循环中多次评估回调
想象一下process.maxDepth=1
,我们分别调用process.nextTick()
和setimmidate()
十次。所有回调都不会在事件循环的单个勾号中进行计算。process.nextTick()
回调将在事件循环的三次执行中进行评估,而setimmidate()
回调将需要整整十个刻度才能完全执行
process.nextTick()
这是一个故障保护,用于防止进程.nextTick()
回调队列完全占用单个可用线程。为了继续尝试尽快清除队列(例如,在下一个滴答声中),将在单个事件循环中多次评估回调
想象一下process.maxDepth=1
,我们分别调用process.nextTick()
和setimmidate()
十次。所有回调都不会在事件循环的单个勾号中进行计算。process.nextTick()
回调将在事件循环的三次执行中进行评估,而setimmidate()
回调将需要整整十个刻度才能完全执行