node.js - Node.js - 超出最大调用堆栈大小 - vm.runInNewContext
问题描述
我在每次循环迭代(由用户给出)时在 vm.runInNewContext 中运行特定用户代码时收到“RangeError:超出最大调用堆栈大小”错误。
我已经在 StackOverflow 上检查了这个问题(参考Node.js - 超出了最大调用堆栈大小),从那里我发现我们应该将函数调用包装到 setImmediate 或 process.nextTick 中。但是,我的整个项目代码都是承诺的。
任何人都可以在这里为任何可能的解决方案提供帮助吗?
谢谢!
解决方案
Maximum call stack size exceeded
几乎总是意味着您在 JavaScript 代码中存在递归问题,因为 JavaScript 中没有任何其他方式可以消耗大量堆栈。您可以通过在异常类型上设置断点来定位问题RangeError
,然后适当地调整代码。
我看到您已经解决了这个问题,但是正如您链接到的答案所解释的那样,在完全承诺的代码中也可能导致无限递归。如果链中的承诺实际上没有执行任何异步执行,则可能会发生这种情况,在这种情况下,控制永远不会真正返回到事件循环,即使代码看起来是异步的。那时将调用包装在setImmediate
or中很有用process.nextTick
。
推荐阅读
- c - 通过复合文字初始化结构变量 - 编译问题?
- flutter - 如何使用谷歌表将用户添加到 Firebase 身份验证
- google-apps-script - 将 docx 文件转换为 Google Docs 并放在同一文件夹中
- android - OkHttp 与 Android 网络安全配置中的证书固定
- javascript - 使用反应钩子切片 json 的数据
- android - 无法从已更改数据的片段中添加选项卡徽章
- flutter - 颤动如何将列对齐到嵌套在另一个列中
- django - 处理定向到反应应用程序主页/索引的 Django Rest Framework 404 页面
- python - 如何重构或友好的程序员视图?
- react-native - 将 onPress 事件传递给子组件。反应原生