我正在使用直接Web Remoting (DWR) JavaScript库文件,只在Safari(桌面和iPad)中得到一个错误
它说
超过最大调用堆栈大小。
这个错误到底是什么意思,它是否完全停止处理?
Safari浏览器也有任何修复(实际上是在iPad Safari上,它说
JS:执行超时
我认为这是相同的调用堆栈问题)
我正在使用直接Web Remoting (DWR) JavaScript库文件,只在Safari(桌面和iPad)中得到一个错误
它说
超过最大调用堆栈大小。
这个错误到底是什么意思,它是否完全停止处理?
Safari浏览器也有任何修复(实际上是在iPad Safari上,它说
JS:执行超时
我认为这是相同的调用堆栈问题)
当前回答
有趣的是,没有人提到异步函数中的等待调用。在我的例子中,我有超过1.5 MB的循环和数据库交互文件。
async function uploadtomongodb() {
await find('user', 'user2', myobj0).then(result => {
}
})
等待将删除“超过最大调用堆栈大小”。否则内存负载过多。不确定Node是否可以处理超过700行和对象。
其他回答
如果你因为某些原因需要一个无限的进程/递归运行,你可以在一个单独的线程中使用webworker。 http://www.html5rocks.com/en/tutorials/workers/basics/
如果你想操纵dom元素并重新绘制,请使用动画 http://creativejs.com/resources/requestanimationframe/
这意味着在代码的某个地方,您正在调用一个函数,该函数又调用另一个函数,以此类推,直到达到调用堆栈限制。
这几乎总是因为递归函数的基本情况没有得到满足。
查看堆栈
考虑这段代码…
(function a() {
a();
})();
下面是几次调用后的堆栈…
正如您所看到的,调用堆栈不断增长,直到达到极限:浏览器硬编码的堆栈大小或内存耗尽。
为了修复它,确保你的递归函数有一个基本情况,能够满足…
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
有趣的是,没有人提到异步函数中的等待调用。在我的例子中,我有超过1.5 MB的循环和数据库交互文件。
async function uploadtomongodb() {
await find('user', 'user2', myobj0).then(result => {
}
})
等待将删除“超过最大调用堆栈大小”。否则内存负载过多。不确定Node是否可以处理超过700行和对象。
在我的例子中,click事件在子元素上传播。所以,我不得不写以下内容:
e.stopPropagation ()
点击事件:
$(document).on("click", ".remove-discount-button", function (e) {
e.stopPropagation();
//some code
});
$(document).on("click", ".current-code", function () {
$('.remove-discount-button').trigger("click");
});
下面是html代码:
<div class="current-code">
<input type="submit" name="removediscountcouponcode" value="
title="Remove" class="remove-discount-button">
</div>
检查Chrome dev工具栏控制台中的错误细节,这将为您提供调用堆栈中的函数,并指导您找到导致错误的递归。