如何一个一个的执行url个请求而不导致栈溢出? (Node.JS)
How to perform url requests one-by-one and not to cause stack overflow? (Node.JS)
目前我有这个代码
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 回调,它应该适用于任何长度的数组。由于您的所有请求都在请求一个页面,因此它将是异步的并且不会产生任何问题。看看async.js页面,它提供了很多功能来同步你的请求。如果您不一定需要一对一的请求,那么您可以只使用基于 setTimeout 的请求并根据网络速度设置超时时间,以便您的请求遵循近似的一对一请求。
console.log(new Error().stack);
in DownloadPage
将向您显示堆栈大小不会增加,因为 request
是异步的。
目前我有这个代码
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 回调,它应该适用于任何长度的数组。由于您的所有请求都在请求一个页面,因此它将是异步的并且不会产生任何问题。看看async.js页面,它提供了很多功能来同步你的请求。如果您不一定需要一对一的请求,那么您可以只使用基于 setTimeout 的请求并根据网络速度设置超时时间,以便您的请求遵循近似的一对一请求。
console.log(new Error().stack);
in DownloadPage
将向您显示堆栈大小不会增加,因为 request
是异步的。