首先,我经常使用 async 和 wait ,但出现此错误:
RangeError: Value undefined out of range for undefined options property undefined
at Set.add (<anonymous>)
at AsyncHook.init (internal/inspector_async_hook.js:19:25)
at PromiseWrap.emitInitNative (internal/async_hooks.js:134:43)
我不知道如何解决这个问题,我完全用 Typescript 编写代码,并且没有创建任何名为“async_hooks”的文件。
而且我不会一次运行超过10个异步函数,我经常使用await,所以它不应该堆积起来,但javascript似乎不会减少asyncId并很快达到数量限制。
我尝试使用较少的 async wait 但这并没有解决问题,但错误消息稍后出现。如果我使用非常少的异步等待,我可以防止出现此错误,直到函数成功完成工作。
(我使用电子7)
Electron 似乎有一个非常低的异步池,但它可以通过默认的打字稿代码重现:
class Test {
private async testCompare(a,b):Promise<boolean> {
return a == b;
}
public async testRun():Promise<void> {
for (let index = 0; index < 999999999; index++) {
for (let index2 = 0; index2 < 999999999; index2++) {
await this.testCompare(index,index2)
}
}
}
}
new Test().testRun();
这段代码产生了非常多的内存使用量,我想我的程序中也有同样的问题。我认为异步池会被填满,直到达到极限。
我遇到了同样的错误Set.add
正如您在我的设置大小达到 16777216 (2^24) 时所做的那样。我无法在文档中找到有关此限制的信息,但我假设集合仅限于 16777216 个唯一值?
使用简单的 for 循环即可轻松测试。
这将引发完全相同的错误:
let s = new Set();
for (let i = 0; i <= 16777216; i++) s.add(i);
这将成功运行:
let s = new Set();
for (let i = 0; i < 16777216; i++) s.add(i);
请注意,这会消耗大约 5GB 的内存,因此,如果由于内存限制而崩溃,请相应地增加堆限制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)