gpt4 book ai didi

node.js - process.nextTick() 是否立即执行

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:58 26 4
gpt4 key购买 nike

我已经观看了这段与事件循环工作相关的精彩视频 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 会将回调放在 事件的开头队列而不是正常结束,目前,我认为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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com