Dan*_*GTA 6 javascript asynchronous promise async-await typescript
首先,我经常使用 async 和 await 并收到此错误:
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)
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题,我在 Typescript 中完全编写了我的代码,而且我没有创建任何名为“async_hooks”的文件。
而且我一次不运行超过 10 个函数 async 我经常使用 await 所以它不应该堆叠但 javascript 似乎没有减少 asyncId 并很快达到数量限制。
我尝试使用 less async await 但这并没有解决问题,但是错误 msg 稍后出现。如果我使用非常少的异步等待,我可以防止出现此错误,直到函数成功完成工作。(我使用电子 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();
Run Code Online (Sandbox Code Playgroud)
这段代码产生了非常多的 ram 使用,我想我的程序中也有同样的问题。我认为异步池会被填满,直到达到极限。
Mun*_*umi 13
Set.add当我的设置大小达到 16777216 (2^24) 时,我遇到了与您相同的错误。我无法在文档中找到有关此限制的信息,但我假设集合仅限于 16777216 个唯一值?
使用简单的 for 循环轻松测试。
这将抛出完全相同的错误:
let s = new Set();
for (let i = 0; i <= 16777216; i++) s.add(i);
Run Code Online (Sandbox Code Playgroud)
这将成功运行:
let s = new Set();
for (let i = 0; i < 16777216; i++) s.add(i);
Run Code Online (Sandbox Code Playgroud)
请注意,这会占用大约 5GB 的内存,因此如果由于内存限制而崩溃,请相应地增加堆限制。