Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归异步函数内存泄漏_Javascript_Typescript_Loops_Recursion_Memory Management - Fatal编程技术网

Javascript 递归异步函数内存泄漏

Javascript 递归异步函数内存泄漏,javascript,typescript,loops,recursion,memory-management,Javascript,Typescript,Loops,Recursion,Memory Management,我想知道这样的递归循环是否会长期防止内存泄漏 const loop = async (url: URL): Promise<void> => { await scrape(url) return await loop(url) } async function scrape(url: URL): Promise<void> { ... if (...) return await scrape(ne

我想知道这样的递归循环是否会长期防止内存泄漏

const loop = async (url: URL): Promise<void> => {
    
    await scrape(url)
    return await loop(url)
}

async function scrape(url: URL): Promise<void> {

    
    ...
    if (...)
       return await scrape(next_url)

}

function main() {
    await loop(...)
}

main()
constloop=async(url:url):Promise=>{
等待刮取(url)
返回等待循环(url)
}
异步函数刮取(url:url):承诺{
...
如果(…)
返回等待刮取(下一个url)
}
函数main(){
等待循环(…)
}
main()

循环
功能正在无限期运行,不会停止。

我建议将条件移动到
循环
,并在异步发电机内使用
循环-

异步函数*循环(url){
while(true){
let res=等待刮取(url)
如果(…)返回
收益率
url=nextUrl
}
}
scrape
函数接受
url
并返回单个结果-

async function scrape(url) {
  ...
}
最后,您的
main
函数将通过
循环执行
,并使用
进行等待。。属于
-

异步函数main(initUrl){ 常量结果=[] 用于等待(循环常数(initUrl)) 结果:推送(res) 返回结果 } main().then(console.log,console.error)

我可能建议将
scrape
重命名为
scrape1
,如scrape one page,并将
loop
重命名为
scrape
。使用异步生成器的一个优点是调用方可以在页面进入时决定如何处理页面。在上面的示例中,我们
将它们推送到一个数组中,但您可以写入磁盘或任何其他操作。

谢谢您的建议,但我想问的是,像我这样的递归是否会导致内存泄漏。是的,肯定会,因为在
循环开始后,没有什么可以停止它。