如何解决延迟节点js中的每个循环迭代,异步
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
。
解决方法
我有下面的代码:
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
但没有设法解决。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。