console.log("b")); process.nextTick(()=> console.log(-6ren">
gpt4 book ai didi

javascript - 2 个 process.nextTicks 是否在同一个刻度(也称为帧)上运行?

转载 作者:行者123 更新时间:2023-12-01 00:22:03 25 4
gpt4 key购买 nike

看下面的代码:

console.log("a")
process.nextTick(()=> console.log("b"));
process.nextTick(()=> console.log("c"));

这当然会打印a,然后是b,然后是ca 是从与 bc 不同的框架(tick)写入的,但它们是 b c是从同一帧编写的?

是这样的吗:

  • 第 1 帧:写入 a
  • 第 2 帧:写入 b,写入 c

或者是这样的:

  • 第 1 帧:写入 a
  • 第 2 帧:写入 b
  • 第 3 帧:编写 c

谢谢!

最佳答案

第一次看这段代码:

let racer = function() {
setTimeout(() => console.log("timeout"), 0);
setImmediate(() => console.log("immediate"));
process.nextTick(() => console.log("nextTick"));
console.log("current event loop");
}

racer()

输出是:

[Running] node "/Users/logicmason/timeouts.js"
current event loop
nextTick
timeout
immediate

[Done] exited with code=0 in 0.203 seconds
  • 第一个执行的是process.nextTick,它将其回调放在事件队列的前面。它将在当前正在执行的代码之后、任何 I/O 事件或计时器之前执行。

  • 接下来是“超时”。由于我们向 setTimeout 传递了 0 超时,因此在执行之前没有额外的强制延迟,并且在下一个循环期间将其放入计时器队列中。

  • 最后,我们有 setImmediate,它显然不像它的名字所暗示的那么立即!它的回调被放置在事件循环的下一个周期的检查队列中。由于检查队列发生晚于定时器队列,因此setImmediate会比setTimeout 0慢。

总而言之,事件循环如下所示:

计时器 -> IO -> 轮询 -> 检查 -> 关闭 -> 计时器 -> ...

  • 计时器:来自 setInterval 或 setTimeout 的回调
  • IO 回调:I/O 事件回调
  • 空闲:由 Node 在 IO 和 Poll 阶段之间内部使用
  • 轮询:检索新的 I/O 事件
  • 检查:来自 setImmediate 的回调在此处执行
  • Close:像套接字一样处理关闭的连接

它挑战时间:)

let racer1 = function() {
setTimeout(() => console.log("timeout"), 0);
setImmediate(() => console.log("immediate"));
process.nextTick(() => console.log("nextTick1"));
process.nextTick(() => console.log("nextTick2"));
}

let racer2 = function() {
process.nextTick(() => console.log("nextTick"));
setTimeout(() => console.log("timeout"), 0);
setImmediate(() => console.log("immediate"));
}

let racer3 = function() {
setImmediate(() => console.log("immediate"));
process.nextTick(() => console.log("nextTick"));
setTimeout(() => console.log("timeout"), 0);
}

racer1()
racer2()
racer3()

关于javascript - 2 个 process.nextTicks 是否在同一个刻度(也称为帧)上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59333673/

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