微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

延迟节点js中的每个循环迭代,异步

如何解决延迟节点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 举报,一经查实,本站将立刻删除。