在每次循环迭代(由用户指定)中运行 vm.runInNewContext 中的特定用户代码时,我收到“RangeError:超出最大调用堆栈大小”错误。
我在 StackOverflow 上检查了这个问题(引用 Node.js - Maximum call stack size exceeded ),从那里我发现我们应该将函数调用包装到 setImmediate 或 process.nextTick 中。但是,我的整个项目代码都是 promisified。
任何人都可以在这里提供任何可能的解决方案吗?
谢谢!
最佳答案
超过最大调用堆栈大小
几乎总是意味着 JavaScript 代码中存在递归问题,因为 JavaScript 中没有任何其他方式可以消耗大量堆栈。
您可以通过在 RangeError
类型的异常上设置断点来定位问题,然后适当调整代码。
我看到您已经解决了这个问题,但是正如您链接到的答案所解释的那样,也有可能在完全 promise 的代码中导致无限递归。如果链中的 promise 实际上不执行任何异步执行,则可能会发生这种情况,在这种情况下,控制永远不会真正返回到事件循环,即使代码看起来是异步的。这时,将调用包装在 setImmediate
或 process.nextTick
中会很有用。
关于Node.js - 超出最大调用堆栈大小 - vm.runInNewContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50266407/