问题标签 [setimmediate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
115054 浏览

javascript - setImmediate vs. nextTick

Node.js 版本 0.10 今天发布并引入了 setImmediate. API 更改文档建议在进行递归nextTick调用时使用它。

根据MDN 所说,它似乎与process.nextTick.

我应该什么时候使用nextTick,什么时候应该使用setImmediate

0 投票
1 回答
35 浏览

javascript - 描述代码执行停止后的正确术语是什么?

在 JavaScript 中,可以在当前代码位完成执行 la setImmediate 或 setTimeout(..., 0) 后立即执行代码。

指代执行差距的正确术语是什么?

我想知道,因为我正在编写一个用于单元测试的实用程序,一旦出现这些差距之一,它就允许测试继续进行,我想给它一个有意义的名称。

目前我的代码看起来像这样,该函数被称为等待:

它是这样使用的:

0 投票
1 回答
518 浏览

javascript - 'this' 在 setImmediate 调用中丢失?

我有一种情况,方法必须通过 setImmediate 以递归方式和异步方式调用自身。

下一个代码与原始代码没有任何关系,但出现了相同的“问题”:“this”引用似乎在第二次调用时丢失了。

我有下一个输出,其中“this.someMethod”在某些时候不再是一个函数,我不理解它:

我通过将方法的最后一行更改为:

但我不明白为什么 setImmediate 会这样。谁能给我一些关于它的链接?我将非常感谢任何帮助。我已经花了几个小时试图找到答案。提前致谢。

-- 编辑:另外,请随时提出更好的标题或修订。我的英语水平很差。

0 投票
2 回答
1140 浏览

javascript - NodeJS SetImmediate 和回调函数

下面的代码有效 - 但是在我将 NODEJS 从 4.. 更新到 6.9.1 之后,它突然抛出一个错误(对于每个调用)......这意味着它完美地执行了所有递归调用,然后告诉我下面的错误消息的 20 倍。 ..

“回调”参数必须是一个函数。

我发现了错误 - 一切正常。它是一个递归调用 - filterTrades。我已经这样使用它很长时间了 - 以前从未遇到过问题。该怎么办?我猜代码使用不必要的资源来捕获某些东西(实际上不需要)?

0 投票
1 回答
167 浏览

javascript - nodejs:我什么时候应该使用`setImmediate(cb)` vs`cb()`?

在阅读The Callback Hell时,我在上面链接的完全相同的示例中遇到了两种不同的调用回调函数的方法(链接部分中的最后一个示例):

接着

因为看起来完全一样的东西。我什么时候使用这两个版本中的哪一个?

0 投票
3 回答
121 浏览

node.js - 为什么在文件读取回调之前调用此 setImmediate?

看看这些代码行

据我所知,setImmediate回调在任何 I/O 操作后的事件循环结束时运行。但在我的情况下,在文件读取操作返回之前调用 setImmediate 回调。请解释为什么会发生这种情况或 setImmediate 回调执行背后的逻辑是什么。

0 投票
1 回答
195 浏览

javascript - Node.js:http.request() 在 setImmediate() 之后触发

我是 Node 的新手,所以我不清楚以下代码行为:

输出:

问题是:

1)为什么http.request()会在之后触发回调setImmediate()?我不明白,为什么setImmediate()通常被称为:它的回调是在循环期间注册的。但正如文档所说,这setImmediate()是一个检查阶段,应该在轮询后在事件循环中处理。如果我理解正确的话,http.request()应该nextTick()是那个轮询阶段;

2)但是如果在pollhttp.request()中没有处理,它会在哪个阶段发生?特别是考虑到它在.setImmediate()

我的 Node.js 版本是 6.11.2。提前感谢您的解释。

0 投票
1 回答
767 浏览

node.js - 使用 setImmediate() 递归

我有以下递归函数:

我想使用setImmediate()以避免堆栈溢出问题(它应该以这种方式实现,而不是在迭代方法中)。但是,当我执行这个函数时,我res只得到第一个元素的数组,而如果我不使用它,我会得到所有元素,setImmediate()并且在我使用时会出现同样的情况nextTick()(我事先知道应该有多少元素)。我在做什么错,如何在此处正确实现此功能(或模拟)?

这是explore()应用蹦床之前的功能

它接受两个参数:vnodes数组中的索引,应该探索哪个元素,而componentN它只是图中组件的计数器。explore()不返回任何内容,它只是nodes将键下数组中对象的状态v从未探索更改为已探索。主要问题是这两个函数preVisit(v)postVisit(v)改变了该对象的状态 - 分别写入第一次和第二次访问它的顺序(从先前的调用弹出堆栈时)。当我explore()用蹦床转换时,他们开始写出意想不到的错误结果。

以这种方式在另一个函数中调用该函数:

还有两个功能postVisitpreVisit

0 投票
1 回答
84 浏览

node.js - 任何人都可以在这段代码中解释 setImmediate 和 setTimeout 的输出吗?

以下代码setImmediate的输出是什么:setTimeout

输出:

当我及时将时间更改setTimeout为 10 时,输出:

任何人都可以向我解释这种行为吗?

0 投票
0 回答
102 浏览

javascript - Node.js 的事件循环如何处理这两段代码?

我正在尝试理解Nodejs关于事件循环的官方解释。他们已经解释了 Timers 阶段的示例,但我无法将其与他们对 setTimeout 和 setImmediate 的解释相匹配。

您能否详细解释一下 Event Loop 对以下代码段所做的所有步骤/过程/检查?

代码 1:

代码 2:

PS1:在评论中,马克让我解释,哪一部分令人困惑。干得好:

以下是他们对第一个示例的解释摘要:“当事件循环进入轮询阶段时,它有一个空队列(fs.readFile() 尚未完成),因此它将等待剩余的毫秒数,直到最快达到计时器的阈值...然后返回计时器阶段并运行其回调”

所以,我的理解是,相应地对于代码1,它应该如下:轮询阶段有空队列,并且达到时间阈值。所以,首先 setTimeout 应该运行。然后去检查阶段,应该 setImmediate 运行。但它的行为不是这样的。为什么?