如何在async.js迭代器(节点)中添加延迟

我正在编写一个爬虫在Node,并发现了奇妙的async.js库。 我不想淹没我爬行的服务器。 所以我想在迭代之间引入一个延迟。 做这个的最好方式是什么? 我可以从setTimeout中的迭代器调用callback()吗?

由于使用Async库完成任何asynchronous任务总是通过调用完成callback来发出信号,所以您可以简单地通过将其放入setTimeout()来延迟调用。 下面是一个例子,根据asynchronous文档中的示例进行了修改:

 async.eachSeries(hugeArray, function iterator(item, callback) { doSomeIO(item, function(err, result) { setTimeout(function() { // process err or result here callback(err); }, 500); }); } }, function done() { //... }); 

这将工作,你可以使用Async系列像这样:

 async.eachSeries(TheUrl, function (eachUrl, done) { setTimeout(function () { var url = 'www.myurl.com='+eachUrl; request(url, function(error, resp, body) { if (error) return callback(error); var $ = cheerio.load(body); //Some calculations again... done(); }); }, 10000); }, function (err) { if (!err) callback(); });