Javascript 如何逐个执行url请求而不导致堆栈溢出?(Node.JS)

Javascript 如何逐个执行url请求而不导致堆栈溢出?(Node.JS),javascript,json,node.js,stack-overflow,Javascript,Json,Node.js,Stack Overflow,目前我有这个代码 function DownloadPage(uri) { request(uri, function (err, res, body) { if (err) { console.log(err); } else { nextURL = FindURLBySomeLogic(body); DownloadPage(nextURL); } });

目前我有这个代码

function DownloadPage(uri) {
    request(uri, function (err, res, body) {
        if (err) {
            console.log(err);
        } else {
            nextURL = FindURLBySomeLogic(body);
            DownloadPage(nextURL);
        }
    });
}
DownloadPage("http://example.com/");

但我认为,我会得到堆栈溢出后,一些数量的页面。页数是无限的。我怎样才能避免这种情况?每个页面只包含JSON数据。

尝试使用同步异步请求。只要不在一个刻度中调用async.js回调,就可以使用任意长度的数组。因为您的所有请求都在请求一个页面,所以它是异步的,不会产生任何问题。看看async.js页面,它提供了很多函数来同步您的请求。如果您不一定需要逐个请求,那么您可以选择基于setTimeout的请求,并根据网络速度设置超时持续时间,以便您的请求遵循近似的逐个请求。

尝试使用同步异步请求。只要不在一个刻度中调用async.js回调,就可以使用任意长度的数组。因为您的所有请求都在请求一个页面,所以它是异步的,不会产生任何问题。看看async.js页面,它提供了很多函数来同步您的请求。如果您不一定需要逐个请求,那么您可以选择基于setTimeout的请求,并根据网络速度设置超时持续时间,以便您的请求遵循近似的逐个请求。

console.log(new Error().stack)下载页面中的code>将向您显示堆栈大小不会增加,因为
请求
是异步的。

控制台.log(新错误().stack) <代码> DownloadPage <代码>将告诉您堆栈大小没有增加,因为<代码>请求<代码>是异步的。

它已经是一个接一个了,因为在前一次完成之后下载一个。如果您真的有无限量的页面,那么我们有很多要考虑的,例如您的存储介质。@mccainz存储没有问题。我所说的“无限多的页面”是指页面会随着时间的推移而出现。此请求将始终在后台工作,不会停止。
console.log(new Error().stack)DownloadPage
中的code>将显示堆栈大小没有增加。@user3173842您实际上是对的。你想回答这个问题还是我可以自己回答?我问这个是因为你会得到一些评级。它已经是一个接一个了,因为你下载了一个在前一个完成之后。如果你真的有无限量的页面,那么我们有很多要考虑的东西,比如你的存储介质。@ McCANZZ存储没有问题。我所说的“无限多的页面”是指页面会随着时间的推移而出现。此请求将始终在后台工作,不会停止。
console.log(new Error().stack)DownloadPage
中的code>将显示堆栈大小没有增加。@user3173842您实际上是对的。你想回答这个问题还是我可以自己回答?我问这个是因为你会得到一些评价。