Node.js:如何限制请求列表?

我正在写一个node.js应用程序,它需要从提供程序的页面列表中获取一些数据:

var list = [ { url: 'http://www.example.com/1' }, { url: 'http://www.example.com/2' }, ... { url: 'http://www.example.com/N' }, ]; 

目前我正在使用async.each ,这很好地工作:

 async.each( list, // 1st param is the array of items function(elem, callback) { // 2nd param is the function that each item is passed to request(elem.url, function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); } }), }, function(err) { // 3rd param is the function to call when everything's done if (err) { console.error('Error in the final async callback:', err); } } ); 

唯一的问题是,网站的服务器有时(可以理解)响应一个403禁止 )的状态代码,由于时间单位的同一个IP的请求过多…

我看到async提供了whilst()方法,其示例是:

 var count = 0; async.whilst( function () { return count < 5; }, function (callback) { count++; setTimeout(callback, 1000); }, function (err) { // 5 seconds have passed } ); 

但我不明白如何使用它与列表,或如何使用它与async.each …结合使用:-(

所以答案是: 我如何在node.js中限制(限制)一个asynchronous请求列表?

PS:为了更清楚,我不希望(如果可能的话)对请求进行排队 ,因为请求可能需要很长时间才能完成…:我只是希望以确定的时间间隔(例如5每个请求之间〜10秒…)。


更新:

在alireza david发表评论之后,我确实尝试了使用async.eachLimit,这对我来说看起来非常有希望…这是它在github模块上的使用示例:

 async.eachLimit( obj.files, limit function (file, complete) { complete(); }, function (err) { } ); 

但限制使用没有logging,并且我不清楚…如果任何人有任何线索…

大部分时间403意味着你应该限制你的请求,因为Web服务器认为你在​​做DDOS攻击。

在这种情况下,你应该async.eachLimit()

 async.eachLimit(obj.files, 1000, function (file, complete) { complete(); }, function (err) { }); 

更新我觉得它, limit选项是并发请求的数量。 你应该减less这个数字(我的意见是2或3只是为了testing)