递归异步函数返回Promise会导致栈/堆溢出吗?
异步递归场景下Promise的垃圾回收疑问
给定以下代码片段:
async function recurse() { await someAsyncStuff(); return recurse(); } await recurse(0);
从逻辑上推测,recurse(i)会解析为recurse(i+1),旧的Promise应该会被垃圾回收(GC),但找不到Node底层处理逻辑的官方文档确认这一点。相反,MDN的相关内容似乎暗示实际情况并非如此——Promise会相互嵌套堆叠,形成套娃式的包装结构。
本地运行这段代码时,程序的总堆内存确实会随时间增长,但增长速度极慢,无法确定这是Promise堆叠导致的,还是其他因素(比如异步操作本身的内存开销、GC延迟等)引发的。
内容的提问来源于stack exchange,提问作者Dusan Kovacevic
相关产品推荐
相关产品推荐

