我正在使用直接Web Remoting (DWR) JavaScript库文件,只在Safari(桌面和iPad)中得到一个错误
它说
超过最大调用堆栈大小。
这个错误到底是什么意思,它是否完全停止处理?
Safari浏览器也有任何修复(实际上是在iPad Safari上,它说
JS:执行超时
我认为这是相同的调用堆栈问题)
我正在使用直接Web Remoting (DWR) JavaScript库文件,只在Safari(桌面和iPad)中得到一个错误
它说
超过最大调用堆栈大小。
这个错误到底是什么意思,它是否完全停止处理?
Safari浏览器也有任何修复(实际上是在iPad Safari上,它说
JS:执行超时
我认为这是相同的调用堆栈问题)
当前回答
遇到同样的问题,不知道怎么回事,开始责怪巴别塔;)
在浏览器中不返回任何异常的代码:
if (typeof document.body.onpointerdown !== ('undefined' || null)) {
问题是严重创建||(或)部分Babel创建自己的类型检查:
function _typeof(obj){if(typeof Symbol==="function"&&_typeof(Symbol.iterator)==="symbol")
所以删除
|| null
让巴别塔翻译起作用了。
其他回答
检测堆栈溢出的问题是,有时堆栈跟踪将被解开,您将无法看到实际发生了什么。
我发现Chrome的一些较新的调试工具在这方面很有用。
点击Performance选项卡,确保Javascript样本被启用,你会得到类似这样的结果。
溢出的地方很明显!如果单击extendObject,您将能够看到代码中确切的行号。
你也可以看到时间,可能有帮助,也可能没有帮助,或者转移注意力。
另一个有用的技巧是,如果你不能真正发现问题,在你认为问题所在的地方放置大量的console.log语句。上面的步骤可以帮助你做到这一点。
在Chrome中,如果你反复输出相同的数据,它会像这样显示问题更清楚。在这个例子中,堆栈在最终崩溃之前击中了7152帧:
dtTable.dataTable({
sDom: "<'row'<'col-sm-6'l><'col-sm-6'f>r>t<'row'<'col-sm-6'i><'col-sm-6'p>>",
"processing": true,
"serverSide": true,
"order": [[6, "desc"]],
"columnDefs": [
{className: "text-right", "targets": [2, 3, 4, 5]}
],
"ajax": {
"url": "/dt",
"data": function (d) {
d.loanRef = loanRef;
}
},
"fnRowCallback": function (nRow, aData, iDisplayIndex, iDisplayIndexFull) {
var editButton = '';
// The number of columns to display in the datatable
var cols = 8;
// Th row element's ID
var id = aData[(cols - 1)];
}
});
在上面的数据函数中,我使用了相同的名称d.loanRef = loanRef,但没有创建变量loanRef,因此递归地声明了自己。
解决方案:声明一个loanRef变量,或者更好的是,使用与d.loanRef不同的名称。
我使用React-Native 0.61.5以及(npm 6.9.0和节点10.16.1)
当我安装任何新的库在项目我得到了一个
(例如NPM install @react-navigation/native——save)
最大调用堆栈大小超过错误
为此,我尽力了
Sudo NPM缓存清理-force
(注:-以下命令通常需要1 ~ 2分钟 取决于你的NPM缓存大小)
在我的例子中,我发送的是输入元素而不是它们的值:
$.post( '',{ registerName: $('#registerName') } )
而不是:
$.post( '',{ registerName: $('#registerName').val() } )
这冻结了我的Chrome标签到一个点,它甚至没有显示我的“等待/杀死”对话框,当页面变得无响应…
在你的代码中有一个递归循环(例如,一个函数最终会一次又一次地调用自己,直到堆栈满为止)。
其他浏览器要么有更大的堆栈(所以您会得到一个超时),要么因为某种原因(可能是放置错误的try-catch)而忽略错误。
发生错误时,使用调试器检查调用堆栈。