使用增量参数循环GET请求

我试图从很多页面(相同的页面,但不同的数据)获取数据。 问题,我认为是与Node的asynchronous请求方法,和'for'循环。 (我是新的nodejs)。

我使用for循环来获取使用请求的JSON数据,但是在得到请求的第一个响应(我认为)之前,循环就结束了。

这是代码,每天我得到JSON:

var str = []; for (var i = 0; i < 2000; i++) { var url = 'https://WEbPAGE.com/public?start='+prevDate+'&end='+nextDate; request(url, (error, response, body)=> { if (!error && response.statusCode === 200) { str.push(body+'\r\n') } }) prevDate = nextDate; nextDate += oneDay; if (nextDate >= today) break; }; 

完成后,我从请求中获取所有数据,但没有sorting,而且数组中的许多位置都是空的。

       

网上收集的解决方案 "使用增量参数循环GET请求"

使用带有callback的函数而不是for循环,只要date不匹配,继续运行相同的函数,然后一次date = today,callback。

 function addData(prevdate,nextDate,cb){ var url = 'https://WEbPAGE.com/public?start='+prevDate+'&end='+nextDate; request(url, (error, response, body)=> { if (!error && response.statusCode === 200) { str = str.concat(body+'\r\n') prevDate = nextDate; nextDate += oneDay; if (nextDate >= today){ cb() }else{ addData(prevdate,nextDate,cb) } } }) } addData(firstPrevDate,firstNextDate,function(){ // str is ready! }); 

编辑:正如在注释中指出的,在这个例子中的请求将被串行执行。 你可以修改方法来一次运行几个,但你可能不应该尝试运行2000个并行请求,否则你将会有一个糟糕的时间!