【发布时间】:2015-08-25 08:01:08
【问题描述】:
我有下面的代码,我想在Myurl 的每次迭代之间放置一个setTimeout。有许多classes,每个都包含许多元素。
//Some calculations before...
var i = 0;
async.whilst(
function () {
return i <= thefooz.length - 1;
},
function (innerCallback) {
//Some calculations where I get classes array.
async.forEachOfSeries(classes, function (Myurl, m, eachDone) {
// Here I want a delay
async.waterfall([
function (next) {
connection.query(
'SELECT * FROM mydata WHERE UrlLink=? LIMIT 1', [Myurl],
next
);
},
function (results, fields, next) {
if (results.length !== 0) {
console.log("Already Present");
return next();
}
console.log("New Thing!");
request(options2, function (err, resp, body) {
if (!err && resp.statusCode == 200) {
var $ = cheerio.load(body);
//Some calculations, where I get AllLinks.
var post = {
ThisUrl: AllLinks[0],
Time: AllLinks[1],
};
var query = connection.query('Insert INTO mydata Set ?', post, next);
};
});
}
], eachDone);
}, function (err) {
if (err) throw err;
});
setTimeout(function () {
i++;
innerCallback();
console.log("Done");
}, 20000);
//Some calculations after...
那么我如何在async.waterfall 中的每个Myurl 之间设置延迟?假设我要延迟 5 秒。我设法在之间设置setTimeout
每个async.whilstiteration 但不是在每个async.forEachOfSeries 迭代之间。它根本不等待,而是继续循环,直到每个 async.forEachOfSeries 完成,然后调用 async.whilst setTimeout。
EDIT:
队列解决方案不起作用。该解决方案似乎只是转到下一页,下一页等等,而不输出到我的数据库。当然,我可以以错误的方式应用它,但我确实尝试完全按照示例所述进行操作。
【问题讨论】:
-
请解释一下你有什么问题,为什么不能在
async.forEachOfSeries里面设置? -
@SharpEdge 它根本不等待,而是继续循环直到每个
async.forEachOfSeries完成,然后调用async.whilstsetTimeout。
标签: javascript node.js settimeout