问题标签 [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 投票
0 回答
906 浏览

javascript - 如何填充 setImmediate?

dataloader我在一个项目中使用了graphql 。不幸的是,它破坏了 Webpack 5,因为:

setImmediate 未定义

我在他们的源代码中看到了问题的出处。我分叉了 repo,做了一个补丁并将其添加到我的package.json. 但是导入数据加载器的文件无法解析路径。所以我需要为这个函数添加一个polyfill。

我试图在我的文件中写这个:

但是打字稿声称:

“窗口”类型上不存在属性“setImmediate”

如何解决这个问题?

0 投票
1 回答
102 浏览

javascript - 使用 setImmediate 提高 JSON.stringify 处理大量数据的性能

我有一些代码,JSON.stringify 是一个对象数组,如下所示:

但是,对于非常大量的数据(例如,包含 6000 多个对象的数组),由于所有 JSON.stringify 处理,可能需要 3 秒以上才能完成。

我并不担心执行此操作所需的时间,但我想避免阻塞事件循环或任何 I/O,所以我想我也许可以使用 setImmediate 来解决这个问题。

这是我使用 setImmediate 执行此操作的方法:

但是,当我运行它时,它似乎不起作用,并且 postsCommentsReadyForDB 是空的。

在这种情况下可以使用 setImmediate 吗?

0 投票
0 回答
69 浏览

node.js - Node.js 事件循环。为什么检查队列的回调在轮询队列的回调之前执行,而 Node.js DOC 则相反?

根据Node.js 文档,当事件循环进入其轮询阶段且轮询队列不为空时,轮询队列中的回调应在事件循环进一步进入其检查阶段之前执行。

然而,实际上,相反的情况会发生,即如果在事件循环进入轮询阶段时轮询和检查 (setImmediate) 队列都不是空的,则检查 (setImmediate) 队列中的回调总是在之前执行来自轮询队列的回调。

这是为什么?我在Node.js 文档中缺少什么?

这里遵循示例代码和来自Node.js 文档的引用。

来自Node.js 文档的引用:

示例代码:

0 投票
0 回答
25 浏览

javascript - Process.nextTick() 和 setImmediate() 添加的回调未执行

我的电子应用程序有问题。有时这些回调没有在开发工具的控制台上打印,而 setTimeout 运行良好。

我看了关于事件循环的文档,感觉很迷茫,因为如果setTimeout可以工作,就意味着事件循环是活着的。根据文档,由process.nextTick添加的回调将在事件循环开始下一次迭代时执行。setImmediate() 也应该在事件循环中工作。

0 投票
1 回答
132 浏览

javascript - 使用 Promise.race 和 setImmediate 确定承诺状态

TL;DR : 已经解决的 Promise会setImmediate比赛中获胜吗?

背景:

有时你想知道一个 Promise 是否在没有等待它完成的情况下被解决。有一些旧的遗留技巧,例如util.inspect用于获取内部状态并检查它是否包含字符串"<pending>"。但是,更稳定的解决方案是使用Promise.race()(非常小的)超时基本上等待您的未知承诺。

这将最多等待 1 毫秒来获取result,然后它将包含p或的解析值undefined。如果需要,“超时承诺”当然可能返回不同于undefined区分实际undefined返回值的内容doSomething()

现在我们要么得到解析的值,要么得到doSomething()唯一的符号PENDING

现在我的问题。除了 之外setTimeout,还有一个setImmediate功能基本上就像一个立即到期的计时器;它只是在解决之前给事件循环一个机会。在我Promise.race上面的表达式中使用它时,凭经验它似乎有效,即,如果p已经解决它会setImmediate在比赛中获胜,但我想知道是否有任何这样的保证- 或者我是否应该使用 1 ms 的计时器保证一个已解决的承诺胜过计时器?

我已经尝试在数组中的承诺传递给p之前和之后放置它并且它以两种方式工作,但我仍然担心它可能会随机运行或依赖于操作系统?或者等待一轮 I/O 是否足以保证任何已解决的 Promise 都会获胜?setImmediatePromise.racesetImmediate

文档中:

在 I/O 事件的回调之后安排回调的“立即”执行

编辑:

我发现即使这个“似乎”也有效:

甚至是这个:

但是,这里的顺序很重要。如果p已解决并且在超时承诺之前,它将获胜,但如果它在数组中的超时承诺之后,它将失败。p但问题是一样的:如果已经解决,这种方法是否保证让胜利?

0 投票
2 回答
358 浏览

node.js - 在 Node.js 中,setImmediate() 回调在当前事件循环滴答时执行,还是在下一个?

在官方文档“setImmediate() vs setTimeout()”部分中,它说:“setImmediate() 旨在在当前轮询阶段完成后执行脚本”,据我了解,这也意味着当前滴答/事件循环循环。

然而,稍后在“process.nextTick() 与 setImmediate()”部分中,它说:“setImmediate()在事件循环的以下迭代或‘tick’上触发”。

那么哪一个是正确的答案,我在这里错过了什么吗?

提前致谢。

文档相关页面:https ://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/