Node.js - 超出最大调用堆栈大小 - vm.runInNewContext

标签 node.js performance

在每次循环迭代(由用户指定)中运行 vm.runInNewContext 中的特定用户代码时,我收到“RangeError:超出最大调用堆栈大小”错误。

我在 StackOverflow 上检查了这个问题(引用 Node.js - Maximum call stack size exceeded ),从那里我发现我们应该将函数调用包装到 setImmediate 或 process.nextTick 中。但是,我的整个项目代码都是 promisified。

任何人都可以在这里提供任何可能的解决方案吗?

谢谢!

最佳答案

超过最大调用堆栈大小几乎总是意味着 JavaScript 代码中存在递归问题,因为 JavaScript 中没有任何其他方式可以消耗大量堆栈。 您可以通过在 RangeError 类型的异常上设置断点来定位问题,然后适当调整代码。

我看到您已经解决了这个问题,但是正如您链接到的答案所解释的那样,也有可能在完全 promise 的代码中导致无限递归。如果链中的 promise 实际上不执行任何异步执行,则可能会发生这种情况,在这种情况下,控制永远不会真正返回到事件循环,即使代码看起来是异步的。这时,将调用包装在 setImmediateprocess.nextTick 中会很有用。

关于Node.js - 超出最大调用堆栈大小 - vm.runInNewContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50266407/

相关文章:

windows - node, forever, coffee - 在 linux 上运行良好但在 windows 上运行不佳

python - 为什么 C 和 Python 中的递归 tetration 比迭代 tetration 更快?

javascript - 变量名长度与性能

javascript - 在 Node 服务器中发布请求后更改浏览器 URL

javascript - 如何捕获 SSE Eventsource 确认

node.js - 在 Windows 10 上使用 Dell Encryption 软件加密的目录中的 npm 安装失败

node.js - AWS-SDK:S3的列表对象中的查询参数

MySQL性能;大数据表还是多数据表?

javascript - 修改 DOM 元素和限制回流的最有效方法是什么?

python - 为什么 [] 比 list() 快?