gpt4 book ai didi

javascript - Node JS 计时器 API 的执行顺序

转载 作者:搜寻专家 更新时间:2023-11-01 00:44:02 25 4
gpt4 key购买 nike

我是 node.js 的新手。我试图理解 Node js 中“异步”的确切含义。

在上述上下文中,我有以下代码:-

function foo()
{
setImmediate(function two()
{
console.log(1);
});
setTimeout(function one()
{
console.log(3);
},0);
process.nextTick(function three()
{
console.log(2);
});
console.log(4);
}
foo();

有人可以深入地向我解释一下上述所有计时器 API 的执行顺序到底是什么吗?为什么会这样?有关回调堆栈等的任何解释/引用也会有所帮助。

最佳答案

首先,4 首先被记录,因为所有其他对 setImmediatesetTimeoutnextTick 的调用都会将函数的执行延迟到某个地方在当前执行的代码之后。但他们的做法各不相同:

设置超时此函数允许您在特定的毫秒数后执行某些操作。如果您传递给此函数的毫秒数小于 1 毫秒,它会始终等待 1 毫秒再调用您的函数。

设置立即此函数允许您在 Node 处理完所有 i/o 事件后执行某些操作。 Node 在事件队列的每个循环中处理 i/o 事件。所以setTimeout总是会在事件队列的下一个循环中执行你的函数。这允许队列旋转畅通无阻。

process.nextTick此函数允许您在当前运行的代码完成后立即执行某些操作。你可以想象它就像你能够修改当前正在执行的代码并在它之后添加一些行,以便它在完成之前做更多的事情。一次又一次地调用此函数确实会阻塞事件循环,因为它无法继续执行队列中的下一个任务,因为它仍在忙于当前任务。这意味着,在您传递给 nextTick 的最后一个函数执行之前, Node 不会处理 i/o 事件。因此,你永远不应该递归地调用这个函数或过度使用它,因为它可以阻止事件循环的旋转。不过,如果发生这种情况,Node 将显示警告。

所以..解释 4 2 1 3 的输出:

  1. 4 是第一个没有延迟的日志,因此是第一个输出。

  2. 2 在 foo() 完成后立即被记录,因此是第二个

  3. 3 比 1 快,因为通常的事件循环周期比 1 毫秒快得多,所以 .. 3 是第三条日志

  4. setTimeout 至少延迟 1 毫秒,这是所有延迟函数中延迟时间最长的。这显然是最后一次。

关于javascript - Node JS 计时器 API 的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25278093/

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