首页 > 解决方案 > Node.js - 超出最大调用堆栈大小 - vm.runInNewContext

问题描述

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

我已经在 StackOverflow 上检查了这个问题(参考Node.js - 超出了最大调用堆栈大小),从那里我发现我们应该将函数调用包装到 setImmediate 或 process.nextTick 中。但是,我的整个项目代码都是承诺的。

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

谢谢!

标签: node.jsperformance

解决方案


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

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


推荐阅读