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

How to add a delay in async.js iterator (Node)

我正在用 Node 编写爬虫程序,刚刚发现了很棒的 async.js 库。我不想让我抓取的服务器不堪重负。所以我想在迭代之间引入延迟。做这个的最好方式是什么?我可以只从 setTimeout 中的迭代器调用 callback() 吗?

这行得通,您可以像这样使用 Async Series :

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();
});

由于使用 Async 库完成任何异步任务总是通过调用完成回调来发出信号,因此您可以通过将其放在 setTimeout() 中来延迟调用它。这是一个示例,改编自异步文档中的示例:

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