我一直在看这个与事件循环工作有关的精彩视频
https://www.youtube.com/watch?v=8aGhZQkoFbQ
从一些阅读中,我想process.nextTick
会将回调放在事件队列的最开始。我也看到有人使用nextTick
立即执行函数
我尝试编写一些代码来确认
function printNextTick(s){
process.nextTick(function(){
console.log(s)
})
}
for (var i=0;i<5;i++){
printNextTick(i)
}
我期望的是4,3,2,1,0,因为
nextTick
始终将回调放置在队列的开头,并且脚本是“执行完成”,这意味着在“将回调放入队列”期间将不执行任何回调,“ 4”被压入最后,因此脚本完成后,“ 4”应该放在队列的第一位,这就是为什么我希望“ 4”首先出现但这是不正确的
===============================更新================= ===================
这是新代码
function printNextTick(s){
process.nextTick(function(){
console.log("nextTick : "+s)
})
}
function printTimeout(s){
setTimeout(function(){
console.log("timeout : "+s)
},0)
}
for (var i=0;i<5;i++){
printTimeout(i)
}
for (var i=0;i<5;i++){
printNextTick(i)
}
//nextTick : 0
//nextTick : 1
//nextTick : 2
//nextTick : 3
//nextTick : 4
//timeout : 0
//timeout : 1
//timeout : 2
//timeout : 3
//timeout : 4
只是想知道为什么有些人将
nextTick
视为immediate
最初,我想nextTick
会将回调放在event queue
的开头而不是正常结束,所以现在,我想nextTick
的队列有一个优先级高于其他队列,至少高于timeout
的队列==================更新===============
上面不是真的!
以下代码的结果是不可预测的
function printNextTick(s){
process.nextTick(function(){
console.log("nextTick : "+s)
})
}
function printTimeout(s){
setTimeout(function(){
console.log("timeout : "+s)
for (var i=0;i<5;i++){
printNextTick(i)
}
},0)
}
for (var i=0;i<5;i++){
printTimeout(i)
}
最佳答案
您传递给process.nextTick()
的所有回调都将附加到内部队列中,该内部队列按顺序在“下一个滴答”中被刷新(以最大IIRC的速度,以免完全耗尽事件循环的其余部分)。因此,在您的示例中,您首先要添加一个打印'0'
的回调,然后添加一个打印'1'
的回调,依此类推。然后依次执行这些操作,您会看到以数字顺序打印的数字。
关于node.js - 是process.nextTick()立即执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39402798/