Nodeでクローラーを書いているところです。 async.js としょうかん。 クロールするサーバーに負担をかけたくないので、繰り返しの間に遅延を導入したいのですが、これを行うための最善の方法は何ですか?setTimeout内のiteratorからcallback()を呼び出すだけでいいのですか
回答:
回答№1の場合は3Asyncライブラリを使った非同期タスクの完了は、常に完了コールバックを呼び出すことによって通知されるので、単にそれを 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() {
//...
});
回答№2の場合は1
それはうまくいくでしょう、あなたはそのように非同期シリーズを使うことができます:
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();
});