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
。使用异步生成器的一个优点是调用方可以在页面进入时决定如何处理页面。在上面的示例中,我们将它们推送到一个数组中,但您可以写入磁盘或任何其他操作。谢谢您的建议,但我想问的是,像我这样的递归是否会导致内存泄漏。是的,肯定会,因为在循环开始后,没有什么可以停止它。