我有下面的代码:
var request = require('request'); var cheerio = require ("cheerio"); var async= require("async"); var MyLink="www.mylink.com"; async.series([ function(callback){ request(Mylink, function (error, response, body) { if (error) return callback(error); var $ = cheerio.load(body); //Some calculations where I get NewUrl variable... TheUrl=NewUrl; callback(); }); }, function(callback){ for (var i = 0; i <=TheUrl.length-1; i++) { var url = 'www.myurl.com='+TheUrl[i]; request(url, function(error, resp, body) { if (error) return callback(error); var $ = cheerio.load(body); //Some calculations again... callback(); }); }; } ], function(error){ if (error) return next(error); });
有谁对我如何延迟循环中的每个循环的建议for loop?假设代码在每次迭代完成后等待10秒。我试过了,setTimeout但没有设法解决。
for loop
setTimeout
您可以设置超时时间,以增加代码间隔,如下所示:
var interval = 10 * 1000; // 10 seconds; for (var i = 0; i <=TheUrl.length-1; i++) { setTimeout( function (i) { var url = 'www.myurl.com='+TheUrl[i]; request(url, function(error, resp, body) { if (error) return callback(error); var $ = cheerio.load(body); //Some calculations again... callback(); }); }, interval * i, i); }
因此,第一个立即运行(间隔* 0为0),第二个在十秒钟后运行,依此类推。
您需要在中i作为最终参数发送,setTimeout()以便将其值绑定到function参数。否则,尝试访问数组值将超出范围,您将获得undefined。
i
setTimeout()
undefined