在node.js中递归地调用异步函数
我是node.js.Learning异步库的新手,目前我有一些urls.For每个网址,我必须提出一个请求,并从该网站,我会得到它从HTML页面的超链接。所以我们必须用Node.js的request.js模块递归地进行调用。在node.js中递归地调用异步函数
var urls=["http://www.a.com","http://www.b.com"];
function getUrls(url,cb){
request(url,function(error,response,body){
if(response && response.statusCode==200)
{
}
cb();
});
}
function startProcess(urls){
async.map(urls,getUrls,function(error,data){
})
}
startProcess(urls);
在getUrls功能,我呼吁每个时间每个url.When我从response.I得到html页面数据正在刮从该页面also..I要调用的URL请求函数“请求”功能对于这些网址也是递归的。
可以不使用async.map函数吗?
你不行。迭代后你会得到堆栈溢出。你应该做什么来解决这个任务,就是维护你想要抓取的URL的队列。然后在每个成功的响应中向该队列添加新的url。类似这样的:
let queue = ['https://some.start.point.net'];
const concurrency = 5;
let activeThreads = 0
async function scraper(url) {
activeThreads++;
const body = await request.get(url);
const urls = // parse body here
for (const url of urls) queue.push(url);
activeThreads--;
}
setInterval(() => {
if (activeThreads < concurrency && queue.length) scraper(queue.shift());
}, 10)
谢谢...你能否给我提供一些很好的链接,以更好地解释异步函数并等待? –
我没有在request.get(url)的返回html body ...我怎样才能得到html的身体...在此先感谢 –
问关于异步/等待的不同问题。同时检查'request'文档以查看返回的内容(它返回带有状态码,正文,头文件等的响应对象),或者只是使用带有断点的调试器。 –
请仔细指定,您想在哪里“继续”。什么不正确? –
@SergeyYarotskiy编辑了qquestion –