一尘不染

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

node.js

我有下面的代码:

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但没有设法解决。


阅读 196

收藏
2020-07-07

共1个答案

一尘不染

您可以设置超时时间,以增加代码间隔,如下所示:

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

2020-07-07